这里主要是Eloquent的初学者。我在两个模型之间有一个工作多对多的关系:Venue和Category。
Venue.php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
class Venue extends Model
{
public function categories()
{
return $this->belongsToMany('App\Models\Category');
}
}
Category.php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
class Category extends Model
{
public function venues()
{
return $this->belongsToMany('App\Models\Venue');
}
}
我需要返回一个包含场地和相关类别的JSON对象作为子属性。但是,使用$venue->with('categories')
会返回一个Builder
对象 - 它无法转换为JSON - 并且使用$venue->with('categories')->get()
会返回一个包含所有场地的巨大对象(或者我认为它们在数据库中。
这样做的正确方法是什么?
编辑03/27/2017:在接受下面的答案之后,我仍然很好奇为什么雄辩会返回那么多的Venue对象。如果有人知道,请留下答案!
答案 0 :(得分:1)
使用first()
方法:
$venue = Venue::where('name', $name)->with('categories')->first();
如果$venue
已经具有特定地点,请使用load()
方法延迟预先加载相关数据:
$venue->load('categories');