У меня есть 3 таблицы:
*document* [id, core_document]
*person* [id, name]
*documentPersonsRole* [document_id, person_id, role] (where role could be accused or victim)
Можно ли создать быстрый метод для возврата первой записи из отношения «принадлежит многим»?Вот мой код из файла модели:
public function documentPersonsRole()
{
return $this->belongsToMany('App\Models\Person', 'document_person_role')
->withPivot('role')
->withTimestamps();
}
public function accused()
{
return $this->belongsToMany('App\Models\Person', 'document_person_role')
->withPivot('role')
->wherePivot('role', 'accused')
->withTimestamps();
}
public function victim()
{
return $this->belongsToMany('App\Models\Person', 'document_person_role')
->withPivot('role')
->wherePivot('role', 'victim')
->withTimestamps();
}
Когда я называю это:
App\Models\Document::with('accused')->first()
=> App\Models\Document {#3118
id: 1,
core_document: "Iure aut eum aut ex et. Magni aliquam illo voluptatem non repellat. Maxime occaecati reiciendis veniam quod neque reiciendis dolores. Eaque quis molestiae dolorem. Et rerum veniam animi sit beatae inventore voluptas. Aut ea atque nulla quis quam incidunt iusto voluptas. Aut corrupti voluptas minima unde dicta vero aut veritatis. Voluptas vitae nam mollitia quasi porro id quod ut.",
accused: Illuminate\Database\Eloquent\Collection {#3127
all: [
App\Models\Person {#3139
id: 41,
name: "Jamie",
pivot: Illuminate\Database\Eloquent\Relations\Pivot {#3138
document_id: 1,
person_id: 41,
role: "accused",
created_at: "2018-10-24 03:55:23",
updated_at: "2018-10-24 03:55:23",
},
},
],
},
}
И вы можете видеть, что обвиняется это коллекция только с одной записью, и когда я получаю ее на стороне клиента, я должен извлечь эту запись из массива, но я хочу работать с объектом.
Когда я пытаюсь что-то вроде этого:
public function accused()
{
return $this->belongsToMany('App\Models\Person', 'document_person_role')
->withPivot('role')
->wherePivot('role', 'accused')
->withTimestamps()->first();
}
Это ошибка, которую я получаю:
BadMethodCallException с сообщением 'Вызов неопределенного метода Illuminate / Database / Query/ Builder :: addEagerConstraints () '
Как я могу использовать first () для извлечения и опроса объекта обвиняемого вместо массива с одной записью.