关系不起作用。的foreach。 Laravel

时间:2016-06-07 09:26:19

标签: php laravel foreach

所以我定义了OrderProduct.php和'Product.php'模型之间的关系:

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()如何解决这个问题?

3 个答案:

答案 0 :(得分: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'));
}

修改

如果您需要通过 id 检索特定记录,请使用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 }}

答案 1 :(得分:0)

你正在给予

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

它只会获取一条记录,结果将不会是一个集合,所以你不能为此做好预测

您可以将其更改为

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

让它发挥作用

您甚至需要检查使用的关系。一个将属于,另一个将是hasmany

答案 2 :(得分: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'));
    }