Laravel 5 lumen/laravel雄辩地通过3种模型关系进行了大量研究

Laravel 5 lumen/laravel雄辩地通过3种模型关系进行了大量研究,laravel-5,eloquent,has-many-through,lumen,belongs-to,Laravel 5,Eloquent,Has Many Through,Lumen,Belongs To,我尝试用三种模型来完成一种关系: Cities.php //table cities id name Neighbourhoods.php //table neighbourhoods id name city_id Blocks.php //table blocks id name neighbourhood_id 我的模型如下所示: Cities.php public function neighbourhoods() { return $this->hasManyThr

我尝试用三种模型来完成一种关系:

Cities.php //table cities
id
name

Neighbourhoods.php //table neighbourhoods
id
name
city_id

Blocks.php //table blocks
id
name
neighbourhood_id
我的模型如下所示: Cities.php

public function neighbourhoods()
{
    return $this->hasManyThrough('App\Neighbourhoods', 'App\Blocks', 'neighbourhood_id', 'city_id', 'id');
}
public function neighbourhoods()
{
    return $this->hasMany('App\Neighbourhoods', 'city_id', 'id');
     // because my model is called Cities.php,
     // the function will look by default 
     // for the column cities_id in neighbourhoods table, 
     // thats why we need to specifiy city_id column
}

public function blocks()
{
    return $this->hasManyThrough('App\Blocks', 'App\Neighbourhoods', 'city_id', 'neighbourhood_id', 'id');
}
public function neighbourhoods()
{
    return $this->hasMany('App\Neighbourhoods');
}
public function blocks()
{
    return $this->hasManyThrough('App\Neighbourhoods', 'App\Blocks');
}
街坊

public function blocks()
{
    return $this->hasMany('App\Blocks', 'neighbourhood_id', 'id');
}
public function cities()
{
    return $this->belongsTo('App\Cities', 'city_id', 'id');
}

public function blocks()
{
    return $this->hasMany('App\Blocks', 'neighbourhood_id','id');
}
public function blocks()
{
    return $this->hasMany('App\Blocks');//by default it will consider id
}
public function city()
{
    return $this->belongsTo('App\City');
}
Blocks.php

public function neighbourhoods()
{
    return $this->belongsToMany('App\Neighbourhoods', 'neighbourhood_id', 'id');
}
public function neighbourhoods()
{
    return $this->belongsTo('App\Neighbourhoods', 'neighbourhood_id');
}
public function neighbourhoods()
{
    return $this->belongsTo('App\Neighbourhoods');
}
结果应该是:

results
 city1:
  neighbourhoods:
   neighbourhood1:
    block1
    block2
    block3
   neighbourhood2
    block1
    block2
 city2:
  neighbourhoods:
   neighbourhood1:
    blocks:
     block1
     block2
     block3
   neighbourhood2:
    blocks:
     block1
     block2
调用结果:

return Blocks::with('neighbourhoods')->get();
我知道我的模型没有正确命名。城市(单数)、邻里(单数)、街区(单数),但传递参数应起作用。 我就是不明白为什么它不起作用

基于@Gaurav Rai回应的关系解决方案

首先,我的模型命名错误。请使用复数形式命名您的数据库,例如:cities、neighborhood、Block和您的模型单数形式,例如:City.php、neighborhood.php和Block.php

根据我的问题,解决方案是:

Cities.php

public function neighbourhoods()
{
    return $this->hasManyThrough('App\Neighbourhoods', 'App\Blocks', 'neighbourhood_id', 'city_id', 'id');
}
public function neighbourhoods()
{
    return $this->hasMany('App\Neighbourhoods', 'city_id', 'id');
     // because my model is called Cities.php,
     // the function will look by default 
     // for the column cities_id in neighbourhoods table, 
     // thats why we need to specifiy city_id column
}

public function blocks()
{
    return $this->hasManyThrough('App\Blocks', 'App\Neighbourhoods', 'city_id', 'neighbourhood_id', 'id');
}
public function neighbourhoods()
{
    return $this->hasMany('App\Neighbourhoods');
}
public function blocks()
{
    return $this->hasManyThrough('App\Neighbourhoods', 'App\Blocks');
}
街坊

public function blocks()
{
    return $this->hasMany('App\Blocks', 'neighbourhood_id', 'id');
}
public function cities()
{
    return $this->belongsTo('App\Cities', 'city_id', 'id');
}

public function blocks()
{
    return $this->hasMany('App\Blocks', 'neighbourhood_id','id');
}
public function blocks()
{
    return $this->hasMany('App\Blocks');//by default it will consider id
}
public function city()
{
    return $this->belongsTo('App\City');
}
Blocks.php

public function neighbourhoods()
{
    return $this->belongsToMany('App\Neighbourhoods', 'neighbourhood_id', 'id');
}
public function neighbourhoods()
{
    return $this->belongsTo('App\Neighbourhoods', 'neighbourhood_id');
}
public function neighbourhoods()
{
    return $this->belongsTo('App\Neighbourhoods');
}
调用关系:

return Cities::with(['neighbourhoods', 'blocks'])->get();

我认为你们之间的关系没有得到很好的界定:

Cities.php

public function neighbourhoods()
{
    return $this->hasManyThrough('App\Neighbourhoods', 'App\Blocks', 'neighbourhood_id', 'city_id', 'id');
}
public function neighbourhoods()
{
    return $this->hasMany('App\Neighbourhoods', 'city_id', 'id');
     // because my model is called Cities.php,
     // the function will look by default 
     // for the column cities_id in neighbourhoods table, 
     // thats why we need to specifiy city_id column
}

public function blocks()
{
    return $this->hasManyThrough('App\Blocks', 'App\Neighbourhoods', 'city_id', 'neighbourhood_id', 'id');
}
public function neighbourhoods()
{
    return $this->hasMany('App\Neighbourhoods');
}
public function blocks()
{
    return $this->hasManyThrough('App\Neighbourhoods', 'App\Blocks');
}
街坊

public function blocks()
{
    return $this->hasMany('App\Blocks', 'neighbourhood_id', 'id');
}
public function cities()
{
    return $this->belongsTo('App\Cities', 'city_id', 'id');
}

public function blocks()
{
    return $this->hasMany('App\Blocks', 'neighbourhood_id','id');
}
public function blocks()
{
    return $this->hasMany('App\Blocks');//by default it will consider id
}
public function city()
{
    return $this->belongsTo('App\City');
}
Blocks.php

public function neighbourhoods()
{
    return $this->belongsToMany('App\Neighbourhoods', 'neighbourhood_id', 'id');
}
public function neighbourhoods()
{
    return $this->belongsTo('App\Neighbourhoods', 'neighbourhood_id');
}
public function neighbourhoods()
{
    return $this->belongsTo('App\Neighbourhoods');
}