Laravel / Eloquent属于ToMany返回所有记录

时间:2017-03-26 22:12:46

标签: php json laravel eloquent many-to-many

这里主要是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对象。如果有人知道,请留下答案!

1 个答案:

答案 0 :(得分:1)

使用first()方法:

$venue = Venue::where('name', $name)->with('categories')->first();

如果$venue已经具有特定地点,请使用load()方法延迟预先加载相关数据:

$venue->load('categories');