【问题标题】:Laravel get model from ID with belongtoManyLaravel 从 ID 和 belongstoMany 获取模型
【发布时间】:2015-04-26 20:06:03
【问题描述】:

我正在使用 Laravel 4 构建一个应用程序,但数据透视表存在一些问题。

有 3 个表 Categories , Products , products_categories (pivot)

分类模型

public function product()
{
    return $this->belongsToMany('Product', 'products_categories');

}

产品型号

public function category()
{
    return $this->belongsToMany('Category', 'products_categories');
}

products_categories 表有 product_idcategory_id 列。

我想要的是获取该类别中的所有产品并在视图中列出它们

$category = Category::where('id' , '=' , '7')->first();

    foreach($category->product as $product){

        echo $product->id;
    }

我可以看到与特定类别相关的产品 ID,但是当我想使用它来获取所有产品本身时:

    $category = Category::where('id' , '=' , '7')->first();

    foreach($category->product as $product){

        $product = Product::where('id' , '=' , $product->id )->get();
    }

    return View::make('index')->with('product',$product);

它不起作用:(出现此错误

试图获取非对象的属性

我试过了

$category = Category::where('id' , '=' , '7')->first();

    $product = array();

    foreach($category->product as $product){

        $product[] = Product::where('id' , '=' , $product->id )->get();

    }

    return View::make('index')->with('product',$product);

这次它抛出了这个错误

Illuminate\Database\Eloquent\Model::setAttribute() 缺少参数 2

我该如何解决这个问题?

【问题讨论】:

    标签: php mysql laravel relationship


    【解决方案1】:

    当前的问题是您正试图从 foreach 循环中重用您的迭代器变量。这会导致你意想不到的结果。

    foreach($category->product as $product) {
                                  ^^^^^^^^
        $product = Product::where('id' , '=' , $product->id )->get();
        ^^^^^^^^
    }
    

    但是,没有必要这样做。 $category->product 已经是 Eloquent 产品模型的集合。无需再次尝试检索单个产品;你已经有了。

    如果您尝试将此 Collection 传递给视图,您可以这样做:

    return View::make('index')->with('product', $category->product);
    

    另外,附带说明一下,如果您尝试通过 id 查找记录,可以使用 find() 方法:

    $category = Category::find(7);
    

    【讨论】:

      猜你喜欢
      • 2021-07-28
      • 2016-08-30
      • 2015-11-12
      • 1970-01-01
      • 2017-02-04
      • 2014-08-02
      • 1970-01-01
      • 1970-01-01
      • 2015-03-26
      相关资源
      最近更新 更多