我有一个包含以下表和关系的数据库:
广告1-1
汽车m-1
模型m-1
品牌
如果我想检索广告,我可以简单地使用:
Advert::find(1);
如果我想要汽车的详细信息,我可以使用:
Advert::find(1)->with('Car');
但是,如果我还想要模型的详细信息(遵循与 Car 的关系),语法是什么,以下内容不起作用:
Advert::find(1)->with('Car')->with('Model');
非常感谢
我有一个包含以下表和关系的数据库:
广告1-1
汽车m-1
模型m-1
品牌
如果我想检索广告,我可以简单地使用:
Advert::find(1);
如果我想要汽车的详细信息,我可以使用:
Advert::find(1)->with('Car');
但是,如果我还想要模型的详细信息(遵循与 Car 的关系),语法是什么,以下内容不起作用:
Advert::find(1)->with('Car')->with('Model');
非常感谢
它在“Eager Loading”下的官方文档中
多重关系:
$books = Book::with('author', 'publisher')->get();
嵌套关系:
$books = Book::with('author.contacts')->get();
所以对你来说:
Advert::with('Car.Model')->find(1);
首先你需要创建你的关系,
<?php
class Advert extends Eloquent {
public function car()
{
return $this->belongsTo('Car');
}
}
class Car extends Eloquent {
public function model()
{
return $this->belongsTo('Model');
}
}
class Model extends Eloquent {
public function brand()
{
return $this->belongsTo('Brand');
}
public function cars()
{
return $this->hasMany('Car');
}
}
class Brand extends Eloquent {
public function models()
{
return $this->hasMany('Model');
}
}
然后你只需要通过这种方式访问:
echo Advert::find(1)->car->model->brand->name;
但是你的表字段应该是,因为 Laravel 会这样猜测它们:
id (for all tables)
car_id
model_id
brand_id
或者您必须在关系中指定它们。
假设您有 3 个模型区域、城市、酒店,然后获取所有带有城市和区域的酒店
定义它们的关系如下: -
旅馆.php
class Hotel extends Model {
public function cities(){
return $this->hasMany(City::class);
}
public function city(){
return $this->belongsTo('App\City','city_id');
}
}
城市.php
class City extends Model {
public function hotels(){
return $this->hasMany(Hotel::class);
}
public function regions(){
return $this->belongsTo('App\Region','region_id');
}
}
区域.php
class Region extends Model
{
public function cities(){
return $this->hasMany('App\City');
}
public function country(){
return $this->belongsTo('App\Country','country_id');
}
}
酒店控制器.php
public function getAllHotels(){
// get all hotes with city and region
$hotels = Hotel::with('city.regions')->get()->toArray();
}
将添加关系函数只是询问所需的关系
public function Car()
{
return $this->belongsTo(Car::class, 'car_id')->with('Model');
}
但如果你想要一个嵌套关系,只需使用 with 中的句点
Advert::with('Car.Model')->find(1);
但对于多关系使用数组
Advert::with('Car','Model')->find(1);