gpt4 book ai didi

mysql - Laravel 连接两个表(包括 null)

转载 作者:行者123 更新时间:2023-11-29 09:23:39 25 4
gpt4 key购买 nike

我有 3 个表列表、城市、州

列表表:

id |城市ID | state_id |...|

列表模型:

class Listing extends Model{

function city(){
return $this->belongsTo('App\Models\City');
}

function state(){
return $this->belongsTo('App\Models\State');
}

列表迁移:

public function up(){
Schema::create('listings', function (Blueprint $table) {
$table->integer('id')->unsigned()->index()->unique()->autoIncrement();
$table->integer('city_id')->nullable();
$table->integer('state_id')->nullable();
....

city_id/state_id 可为空!

城市表:

id |状态_id |名称 | ...|

城市 型号:

class City extends Model{

public function listings(){
return $this->hasMany('App\Models\Listing');
}

function state(){
return $this->belongsTo('App\Models\State');
}

迁移:

public function up(){
Schema::create('cities', function (Blueprint $table) {
$table->integer('id')->unsigned()->index()->unique()->autoIncrement();
$table->integer('state_id')->nullable();
$table->string('name');

状态表:

id |名字...|

型号:

class State extends Model{

public function listings(){
return $this->hasMany('App\Models\Listing');
}

function cities(){
return $this->hasMany('App\Models\City');
}

迁移:

public function up(){
Schema::create('states', function (Blueprint $table) {
$table->integer('id')->unsigned()->index()->unique()->autoIncrement();
$table->string('name');

listings 表具有 state_idcity_id 的外键。两者的关系是一个城市或州与多个列表的关系。

city 表也有外键 state_id,并将一个州与多个城市相关联。

我想从城市中选择所有内容,并从每个城市/州的列表表中计算行数,我可以:

foreach($listings as $listing){
{{$listing->city or state . ' | ' . $listing->all (count listings for current city/state)}}
}

我尝试过的是:

        $locations = DB::table('listings')
->join('states', 'states.id', '=', 'listings.state_id')
->join('cities', 'cities.id', '=', 'listings.city_id')
->groupBy(['listings.city_id', 'listings.state_id' ])

->select(
'states.name.name as state',
'cities.name as city',
'states.id as state_id',
'city.id as city_id',
DB::raw("COUNT(listings.id) as countListings")
)->get();

问题是我希望一个集合中的所有城市和州与另一个键/属性 - 计算该城市/州的列表。

是城市还是州,没关系,我只是想要他们的名字和计数列表。

我正在使用最新的 Laravel 版本和 MySQL。

最佳答案

不确定它是否完全满足您的需求,但如果您想避免任何复杂的 SQL 查询和联合,您可以执行以下操作:

$states = State::with(['listings', 'listings_count'])->get();
$cities = City::with(['listings', 'listings_count'])->get();

$locations = $states->merge($cities);

如果您的集合很大,那么性能就不太好,但对于较小的集合仍然有用。

关于mysql - Laravel 连接两个表(包括 null),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59998785/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com