Получить значение столбца от отношения многие ко многим в Laravel
Атрибут.РНР
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class Attribute extends Model
{
protected $guarded = [];
public function products()
{
return $this->belongsToMany('App\Product');
}
}
Товар.РНР
<?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
Спасибо
Ответы - Получить значение столбца от отношения многие ко многим в Laravel / Get column value from Many to Many Relationship in Laravel

12.01.2020 11:18:20
Вы можете решить эту проблему, добавив следующий метод вашего конца отношений
withPivot(['value']);
public function attributes()
{
return $this->belongsToMany('App\Attribute')->withPivot(['value']);
}
А также
public function products()
{
return $this->belongsToMany('App\Product')->withPivot(['value']);
}

withPivot('value')
сделает это. Вот документация: laravel.com/docs/6.x/eloquent-relationships


12.01.2020 02:17:51
Когда мы реализуем связь "много ко многим", она по умолчанию создает промежуточную таблицу
В вашем случае эта таблица является
attribute_product
стол.
Это значение таблицы было получено этими моделями по Pivot
Чтобы добавить дополнительный столбец в (сводную таблицу )
По умолчанию в таблице attribute_product будут присутствовать только ключи модели [ pivot
, $product = App\Product::find(1);
foreach ($product->attributes as $attribute) {
echo $attribute->pivot->product_id;
}
]$attribute_id
таблица содержит дополнительные атрибуты, их необходимо указать при определении связи:
$product_id
Изменение attribute_product
атрибут name на ваше имя
возможно, вы захотите переименовать свой промежуточную таблицу доступа к pivot
, а не return $this->belongsToMany('App\Attribute')->withPivot('column1', 'column2','value');
.
pivot
Затем вы будете получать по values
вместо pivot