36

我有一个包含以下表和关系的数据库:

广告1-1汽车m-1模型m-1品牌

如果我想检索广告,我可以简单地使用:

Advert::find(1);

如果我想要汽车的详细信息,我可以使用:

Advert::find(1)->with('Car');

但是,如果我还想要模型的详细信息(遵循与 Car 的关系),语法是什么,以下内容不起作用:

Advert::find(1)->with('Car')->with('Model');

非常感谢

4

4 回答 4

116

它在“Eager Loading”下的官方文档中

多重关系:

$books = Book::with('author', 'publisher')->get();

嵌套关系:

$books = Book::with('author.contacts')->get();

所以对你来说:

Advert::with('Car.Model')->find(1);
于 2013-09-23T15:51:57.207 回答
5

首先你需要创建你的关系,

<?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

或者您必须在关系中指定它们。

于 2013-09-23T15:53:34.080 回答
1

假设您有 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();

}
于 2020-05-28T11:30:43.557 回答
1

将添加关系函数只是询问所需的关系

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);
于 2022-01-12T20:29:49.317 回答