Laravel5.8归属于关系不适用于foreach循环

时间:2019-08-14 02:06:12

标签: php laravel laravel-5 relationship belongs-to

我正在使用hasMany和belongsTo处理Laravel关系。它适用于hasMany关系,但是我在belongsTo上有问题,无法收集foreach循环。这是我的categories表。

    id    name
  --------------
    1     food

还有products表。

    id    name         category_id
  ----------------------------------
    1     pizza          1
    2     hamburger      1

下面是hasMany产品模型。

# Product.php

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

下面是belongsTo类别模型。

# Category.php

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

刀片出现错误:

  

试图获取非对象的属性

 <tbody>
   @foreach ($products as $product)
      <tr>
           <td> {{ $product->category->name }} </td>
       </tr>
    @endforeach
  </tbody>

对此,我们将不胜感激,

2 个答案:

答案 0 :(得分:2)

问题在于方法的定义。 belongsTo方法的第二个参数是外键列名称。试试这个:

# Product.php

public function category()
{
    return $this->belongsTo(Category::class, 'category_id');
}

但是,由于您的外键是型号名称,后跟_idcategory_id),因此Laravel默认会查找该键。.因此,您可以这样简化它:

# Product.php

public function category()
{
    return $this->belongsTo(Category::class);
}

来自documentation

  

...在上面的示例中,雄辩者将尝试匹配post_id   从Comment模型到id模型上的Post。雄辩   通过检查名称来确定默认外键名称   关系方法,并在方法名后加上_后缀   按主键列的名称。但是,如果外键在   Comment模型不是post_id,则可以传递自定义键名称   作为belongsTo方法的第二个参数:

/**
 * Get the post that owns the comment.
 */
public function post()
{
    return $this->belongsTo('App\Post', 'foreign_key');
}

答案 1 :(得分:1)

Category.php

public function category()
{
  return $this->belongsTo(Category::class, 'category_id');
}

而不是category()中的'id',而是使用'category_id'.....,因为您已经给category_id指定了外键....因此laravel会搜索它...