Laravel-如何从belongsToMany获取单个模型实例而不是集合,而是单个模型

时间:2019-05-07 23:26:31

标签: php laravel laravel-5 model relation

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

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

1 个答案:

答案 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对此主题。