@ Амарнасан был близко, но порядок внешних ключей был неправильным.Попробуйте это:
Deal.php
public function bulletins()
{
return $this
->belongsToMany(Bulletin::class, 'deals_items', 'deal_id', 'bulletin_id')
->withPivot('title','desc');
}
Bulletin.php
public function deals()
{
return $this
->belongsToMany(Deal::class, 'deals_items', 'bulletin_id', 'deal_id')
->withPivot('title','desc');
}
Из docs :
Как упоминалось ранее, для определения имени таблицы присоединяющейся таблицы взаимосвязей Eloquent объединит два связанных имени модели в алфавитном порядке.Однако вы можете переопределить это соглашение.Вы можете сделать это, передав второй аргумент методу belongsToMany
:
return $this->belongsToMany('App\Role', 'role_user');
В дополнение к настройке имени присоединяемой таблицы, вы также можете настроить имена столбцов ключей таблицы с помощьюпередача дополнительных аргументов методу belongsToMany
.Третий аргумент - это имя внешнего ключа модели, для которой вы определяете отношение, а четвертый аргумент - это имя внешнего ключа модели, к которой вы присоединяетесь:
return $this->belongsToMany('App\Role', 'role_user', 'user_id', 'role_id');
Обновление
Когда вы получаете доступ к связи как метод: $bulletin->deals()
вы получаете доступ к самой связи.Это вернет экземпляр \Illuminate\Database\Eloquent\Relations\BelongsToMany
(в вашем случае).Здесь запрос еще не выполнен , поэтому вы можете продолжать добавлять ограничения к вашему запросу, например:
$bulletin
->deals()
->where('seller_id', 45) // <---
->skip(5) // <---
-> ... (And so on)
Когда вы обращаетесь к нему как к динамическому свойству, вы уже выполняетезапрос, так что это будет возвращать Collection
экземпляр.Это то же самое, что вызвать отношение как метод, а затем присоединить ->get()
в конце, так что эти два эквивалента:
$bulletin->deals()->get()
// equals to:
$bulletin->deals
Проверьте этот другой ответ , он отвечает на вашвопрос.