Laravel - Eloquent Relationship не работает - PullRequest
0 голосов
/ 08 мая 2018

У меня есть две модели с отношением Один-ко-многим.Я хочу отобразить данные с отношениями в блейде.

Магазинный стол

<strong>id | name | url</strong> 1 | NY | ny | 2 | CA | ca |

Таблица продуктов

<strong>id | shop_id | slug</strong> 1 | 1 | ca 2 | 2 | wa

Shop.php

public function products()
{
    return $this->hasMany(Product::class, 'shop_id');
}

Модель продукта

 public function shops()
{
    return $this->belongsTo(Shop::class, 'id');
}

Controller.php

public function category($slug)
{

    $shop = Shop::where('url', $slug)->firstorfail();
    $products = Product::with(['shops'])->where(['shop_id' => $shop->id)->get();
    $url = Shop::where('id', $products->shop_id)->pluck('url');
}

Маршрут

Route::get('/{url}/{slug}', 'Controller@category')->name('view')->where('slug', '[\w\d\-]+(.*)');

Просмотр

<a href="{{ route('view', [$url, $products->slug]) }}"

Возвращается Свойство [shop_id] не существует в этом экземпляре коллекции.

Ответы [ 4 ]

0 голосов
/ 08 мая 2018

Ваша проблема здесь: <a href="{{ route('view', [$url, $products->slug]) }}"

$products - this is collection. You need to do $products[0]->slug

или

@foreach($products as $product)
<a href="{{ route('view', [$url, $product->slug]) }}"
@endforeach
0 голосов
/ 08 мая 2018

Вы указали неправильный столбец:

public function shops()
{
    return $this->belongsTo(Shop::class, 'shop_id');
}
0 голосов
/ 08 мая 2018
Try this:  
  public function products(){
        return $this->hasMany('App\Product','shop_id','id');
    }
0 голосов
/ 08 мая 2018

Вам не нужны отношения с магазинами, которые вы просто делаете

products = Product::where('shop_id',$shop->id)->get();

на самом деле ваша функция не возвращает значение, для чего оно используется?

...