Получить значение столбца из отношения «Много ко многим» в Laravel - PullRequest
0 голосов
/ 12 января 2020

Это моя структура таблиц: enter image description here

Атрибут. php

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Attribute extends Model
{
   protected $guarded = [];

   public function products()
   {
       return $this->belongsToMany('App\Product');
   }

}

Product. php

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Product extends Model
{
   protected $guarded = [];

   public function attributes()
   {
       return $this->belongsToMany('App\Attribute');
   }

}

Я хочу получить столбец value для каждой строки. Какой код я должен написать в моем контроллере для доступа к value? Laravel версия: 6.9.0 Спасибо

Ответы [ 2 ]

2 голосов
/ 12 января 2020

Вы можете решить эту проблему, добавив следующий метод завершения ваших отношений

withPivot(['value']);
public function attributes()
{
    return $this->belongsToMany('App\Attribute')->withPivot(['value']);
}

А также

public function products()
{
    return $this->belongsToMany('App\Product')->withPivot(['value']);
}
0 голосов
/ 12 января 2020

Когда мы реализуем отношение Многие ко многим , по умолчанию создается промежуточная таблица

В вашем случае это таблица attribute_product, мы можем ссылаться на эту таблицу как Pivot таблица.

Это значение таблицы было получено этой моделью по pivot имени атрибута следующим образом:

$product = App\Product::find(1);

foreach ($product->attributes as $attribute) {
    echo $attribute->pivot->product_id;
}

Чтобы добавить дополнительный столбец в ( Сводная таблица )

По умолчанию в таблице attribute_product присутствуют только ключи модели [$attribute_id, $product_id]. Если ваша таблица pivot содержит дополнительные атрибуты, вы должны указать их при определении отношения:

return $this->belongsToMany('App\Attribute')->withPivot('column1', 'column2','value');

Чтобы изменить pivot Имя атрибута на ваше имя

вы можете через sh переименовать свой метод доступа к промежуточной таблице в values вместо pivot.

return $this->belongsToMany('App\Attribute')
                ->as('values')

Тогда вы получите $attribute->values->product_id вместо $attribute->pivot->product_id

...