首页 > 解决方案 > Laravel - 如何获取单个模型实例而不是集合,而是从 belongsToMany 获取单个模型

问题描述

我在我的一个模型中定义了这种关系。这是最简单的情况。

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

标签: phplaravellaravel-5modelrelation

解决方案


您可以定义一个访问器来获取您的第一个元素:

/** 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;

检查与此主题相关的文档。


推荐阅读