2016-06-07 2 views
0

Так я определил отношения между OrderProduct.php и моделей '' product.php так:Отношения не работают. Для каждого. Laravel

OrderProduct.php:

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

Product.php

public function order() 
{ 
    return $this->belongsTo('App\OrderProduct'); 
} 

OrderController функция

public function orderShow($id) 
{ 
    //$order = Order::where('id', $id)->first(); 
    $products = OrderProduct::where('id', 32)->first(); 
    return view('admin.orders.show', compact('order', 'products')); 
} 

Когда я делаю это Еогеасп:

@foreach($products as $product) 
        <?php dd($product) ?> 
@endforeach 

я получаю Invalid argument supplied for foreach() Как это исправить?

+0

OrderProduct :: где (» id ',' 32 ') -> first(); ---> Только вызов одного продукта. –

+0

-> die and dump = exit code –

+0

@labas GamePage ваша проблема решена ниже, но я хочу дать вам предложение, что: Вы определяете принадлежность tot() в обеих моделях. Используйте hasMany() или hasOne() в любом из –

ответ

1

У вас только первая запись из набора.
Попробуйте

public function orderShow($id) 
{ 
    //$order = Order::where('id', $id)->get(); 
    $products = OrderProduct::where('id', 32)->get(); 
    return view('admin.orders.show', compact('order', 'products')); 
} 

EDIT

Если вам нужно получить определенную запись по ид, используйте find() или даже findOrFail() метод (разницу вы можете найти в docs);

public function orderShow($id) 
{ 
    // this will retrieve record with id=32 from db if it exists, 
    // and throw Illuminate\Database\Eloquent\ModelNotFoundExceptio otherw 
    $product = OrderProduct::findOrFail(32); 

    return view('admin.orders.show', compact('product')); 
} 

затем в шаблоне лезвия вы можете получить доступ к $product информации как объект, как и

{{ $product->name }} 
{{ $product->otherProductProperty }} 
+0

Теперь нет ошибки. Но я все равно не получаю информацию о каких-либо продуктах. –

+0

положите '{{dd ($ products)}}' в свой клинок и покажите нам, что вы увидите. Это должен быть экземпляр 'Collection'/ – huuuk

+0

' Collection {# 254 ▼ #items: [] } ' –

0

Вы даете

$products = OrderProduct::where('id', 32)->first(); 

, который закачает вам только одну запись результата не будет коллекцией, так что вы не можете сделать Еогеасп для этого

Вы можете изменить его как

$products = OrderProduct::where('id', 32)->get(); 

, чтобы заставить его работать

Вам нужно даже проверить взаимосвязь. Один из них будет принадлежать, а другой будет hasmany

0

вы должны попробовать, как это ..

public function orderShow($id) 
    { 
     //$order = Order::where('id', $id)->get(); 
     $products = OrderProduct::where('id', 32)->with('product')->get(); 
     return view('admin.orders.show', compact('order', 'products')); 
    } 
Смежные вопросы