2017-10-15 88 views
1

Laravel 5.5。当我使用控制器这样的:Laravel得到()with()

$ad = Ad::get(); 
$category = Category::get(); 
$categoryItem = CategoryItem::get(); 

$c = CategoryItem::with('ad')->get(); 

我得到这样的观点:属于关联AD和类别类

{"id":1,"ad_id":"1","cat_id":"1","created_at":"2017-10-14 00:00:00","updated_at":"2017-10-14 00:00:00","ad":{"id":1,"title":"Test 1","created_at":"2017-10-14 00:00:00","updated_at":"2017-10-14 00:00:00"}} 

{"id":2,"ad_id":"2","cat_id":"2","created_at":"2017-10-14 00:00:00","updated_at":"2017-10-14 00:00:00","ad":{"id":2,"title":"Test 2","created_at":"2017-10-14 00:00:00","updated_at":"2017-10-14 00:00:00"}} 

{"id":3,"ad_id":"3","cat_id":"1","created_at":"2017-10-14 00:00:00","updated_at":"2017-10-14 00:00:00","ad":{"id":3,"title":"Test 3","created_at":"2017-10-14 00:00:00","updated_at":"2017-10-14 00:00:00"}} 

{"id":4,"ad_id":"4","cat_id":"2","created_at":"2017-10-14 00:00:00","updated_at":"2017-10-14 00:00:00","ad":{"id":4,"title":"Test 4","created_at":"2017-10-14 00:00:00","updated_at":"2017-10-14 00:00:00"}} 

CategoryItem模型。

然而,当我尝试用分类得到CategoryItem,我的意思是这样的:

​​

我得到这个观点,与NULL类别的对象旁边:

{"id":1,"ad_id":"1","cat_id":"1","created_at":"2017-10-14 00:00:00","updated_at":"2017-10-14 00:00:00","category":null} 

{"id":2,"ad_id":"2","cat_id":"2","created_at":"2017-10-14 00:00:00","updated_at":"2017-10-14 00:00:00","category":null} 

{"id":3,"ad_id":"3","cat_id":"1","created_at":"2017-10-14 00:00:00","updated_at":"2017-10-14 00:00:00","category":null} 

{"id":4,"ad_id":"4","cat_id":"2","created_at":"2017-10-14 00:00:00","updated_at":"2017-10-14 00:00:00","category":null} 

分类模型的hasMany两个广告和CategoryItems。

我实际上想要做的是能够通过CategoryItem同时获得广告和类别,标题,ID和其他信息......我只需要了解这一点,以便稍后可以更改通过ID获取项目获取项目通过塞名称...

回答

2

由于您使用的不是category_id定制外键名cat_id,使你的代码工作,你需要指定的关系定义外键:

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

雄辩确定默认外键nam e通过检查关系方法的名称并在_id后面加上方法名称。您可以通过自定义键名作为第二个参数belongsTo方法

https://laravel.com/docs/5.5/eloquent-relationships#one-to-many-inverse