我有两个表,organizations
和categories
。这就是我的表格和模型的设置方式:
表:
organizations
id - integer
category_id - integer, fk
name - string
...
categories
id - integer
name - string
型号:
class Organization extends Eloquent
{
public function category()
{
return $this->belongsTo('Category');
}
public function comments()
{
return $this->morphMany('Comment', 'commentable');
}
}
class Category extends Eloquent
{
public $timestamps = false;
public function organization()
{
return $this->hasMany('Organization');
}
}
在我的routes.php文件中,我有以下代码(其中$category
等于“组织”):
$query = Organization::query()
->join('categories', 'categories.id', '=', $category . '.id')
->select('categories.name as category');
$tiles = $query->get();
在我看来,我能够毫无错误地执行以下操作:
foreach($tile->comments as $comment)
{
...
}
...
$tile->name;
但是,调用$tile->category->name
会给我一个错误Trying to get property of non-object
。调用$tile->category
只会返回null。如何显示与组织关联的类别?我能够很好地检索其他属性和关系,但这给了我一个问题。
答案 0 :(得分:2)
您的代码中存在错误:$category . '.id'
应该$category . '.category_id'
这样做会使$tile->category->name
工作。
另请注意(您可能已经知道此),在您提供的代码中,您实际上并未使用Organization
类中设置的belongsTo关系,您只是在使用联合数据。
以下也可以使用Eloquent ORM利用模型关系方法:
$tiles = Organization::with('category')
->get();
foreach ($tiles as $tile)
{
echo $tile->name . '<br>';
echo $tile->category->name . '<br>';
}
或者你可以从类别模型中反过来这样做:
$tiles = Category::with('organization')
->get();
foreach ($tiles as $tile)
{
echo $tile->name . '<br>';
foreach($tile->organization as $org)
{
echo $org->name . '<br>';
}
}