我在一个模型中定义了这种关系。这是最简单的情况。
use \App\Models\Related;
public function entities()
{
return $this
->belongsToMany(Entity::class, 'entity_related', 'related_id', 'entity_id');
}
现在,我想创建一个仅从表中获取一个模型的关系。
我刚刚定义了相同的关系,但是使用了->take(1)
。粗暴的,但是行得通。
这种解决方案的不足之处在于,我需要做一个foreach
循环才能得到想要的单个模型。
use \App\Models\Entity;
public function firstOfEntities()
{
return $this
->belongsToMany(Entity::class, 'entity_related', 'related_id', 'entity_id')
->take(1); // <---
}
如何正确定义仅获取一个(几乎任意一个)模型实例的关系,而不是创建一个集合?
完成上述工作后,我希望能够在foreach
循环内的模板文件中使用单个模型:
@foreach($object as $o)
<h2>{{ $o->singleEntity->name }}</h2>
<p>{{ $o->singleEntity->description}}</p>
@endforeach
答案 0 :(得分:5)
您可以定义一个accessor来获取第一个元素:
/** MyModel.php */
use \App\Models\Entity;
// Your current relationship
public function entities()
{
return $this
->belongsToMany(Entity::class, 'entity_related', 'related_id', 'entity_id');
}
// the accessor
public function getFirstEntityAttribute()
{
return $this->entities()->first();
}
然后在您的控制器中:
/** MyModelController.php */
$model = MyModel::find(1);
$entity = $model->first_entity;
选中the docs related对此主题。