雄辩的-渴望的加载关系 [英] Eloquent - Eager Loading Relationship
本文介绍了雄辩的-渴望的加载关系的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我试图弄清楚如何从相关表中加载数据.我有2个型号Group
和GroupTextPost
.
I'm trying to figure out how to eager load data from a related table. I have 2 models Group
and GroupTextPost
.
Group.php
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
class Group extends Model
{
protected $table = 'group';
public function type()
{
return $this->hasOne('\App\Models\GroupType');
}
public function user()
{
return $this->belongsTo('\App\Models\User');
}
public function messages()
{
return $this->hasMany('\App\Models\GroupTextPost');
}
}
GroupTextPost.php
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
class GroupTextPost extends Model
{
protected $table = 'group_text_post';
public function user()
{
return $this->belongsTo('\App\Models\User');
}
public function group()
{
return $this->belongsTo('\App\Models\Group');
}
}
我要做的是在获取组文本帖子时急于加载user
,以便在提取消息时包括用户名.
What I'm trying to do is eager load the user
when fetching group text posts so that when I pull the messages the user's name is included.
我已经尝试过这样做:
public function messages()
{
return $this->hasMany('\App\Models\GroupTextPost')->with('user');
}
...并这样打电话:
... and calling like so:
$group = Group::find($groupID);
$group->messages[0]->firstname
但是我得到一个错误:
Unhandled Exception: Call to undefined method Illuminate\Database\Query\Builder::firstname()
这与雄辩有关系吗?
推荐答案
您不应急于直接加载该关系.您可能希望始终将用户加载到GroupTextPost模型上.
You should not eager load directly on the relationship. You could eager load the user always on the GroupTextPost model.
GroupTextPost.php
GroupTextPost.php
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
class GroupTextPost extends Model
{
protected $table = 'group_text_post';
/**
* The relations to eager load on every query.
*
* @var array
*/
protected $with = ['user'];
public function user()
{
return $this->belongsTo('\App\Models\User');
}
public function group()
{
return $this->belongsTo('\App\Models\Group');
}
}
或者您可以使用嵌套的渴望加载
$group = Group::with(['messages.user'])->find($groupID);
$group->messages[0]->user->firstname
这篇关于雄辩的-渴望的加载关系的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文