Laravel 5: отношения между продуктами и избранными продуктами

Я пишу пример сайта электронной коммерции с Laravel 5.
У меня есть 2 таблицы:

Schema::create('products', function (Blueprint $table) {
$table->increments('id');
$table->string('name');
$table->text('description');
$table->float('price');
$table->integer('category_id');
$table->timestamps();
});

а также

Schema::create('featureds', function (Blueprint $table) {
$table->integer('product_id')->unique()->unsigned();
});

Schema::table('featureds', function($table) {
$table->foreign('product_id')->references('id')->on('products')->onDelete('cascade');
});

модели

class Product extends Model
{
public function category(){
return $this->belongsTo('App\Category');
}
}

class Featured extends Model
{
public function product(){
return $this->hasOne('App\Product', 'product_id');
}
}

Тогда у меня есть Controllerгде я беру 4 featured products:

$featured_products = Featured::limit(4)->get();
return view('home', ['featured_products' => $featured_products]);

Сейчас я пытаюсь показать эти популярные продукты на мой взгляд. Если я покажу product_id от Featured model, все отлично:

@foreach($featured_products as $prod)
{{$prod->product_id}}
@endforeach

Но я хочу взять имя product по указанным признакам. Я попробовал так:

@foreach($featured_products as $prod)
@foreach($prod as $p)
{{$p->name}}
@endforeach
@endforeach

Так как featured_productscontrollerКажется, это коллекция, но она не работает!

0

Решение

В вашем Featured модель, у вас есть отношения в методе product() когда вы хотите получить доступ к отношению из представления, вы можете вызвать имя метода как свойство, в вашем случае у вас есть метод с именем product() так что вы должны позвонить product свойство как это:

@foreach($featured_products as $prod)
{{ $prod->product->name }}
@endforeach

Это автоматически напишет product name на основе отношений, которые вы настроили в модели.

Ссылка: https://laravel.com/docs/5.2/eloquent-relationships

Редактировать:

Извините, мой плохой, я думаю, вы определяете неправильное отношение, ваш Product модель, должна иметь featured() метод, который использует hasOne отношение, в то время как Featured модель должна иметь product() метод с использованием belongsTo связь. Так в тебе App\Featured модель, вы должны определить отношение следующим образом:

return $this->belongsTo('App\Product');

И в твоем App\Product Модель вы должны определить отношение так:

return $this->hasOne('App\Featured');

Надеюсь, что это работает

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]