gpt4 book ai didi

laravel - 使用连接表进行查询带来错误的 ID - Laravel

转载 作者:行者123 更新时间:2023-12-02 10:36:48 26 4
gpt4 key购买 nike

这让我发疯。

我有两个表:记录和用户以及一个用于获取用户记录的查询:

$records = Record::with('user')
->join('users', 'users.id', '=', 'records.user_id')
->orderBy('users.name', 'asc')
->where('schedule_id', $schedule->id)
->get();

dd($records); 给我带来了这个:

Collection {#827 ▼
#items: array:6 [▼
0 => Record {#773 ▼
#connection: "mysql"
#table: null
#primaryKey: "id"
#keyType: "int"
+incrementing: true
#with: []
#withCount: []
#perPage: 15
+exists: true
+wasRecentlyCreated: false
#attributes: array:13 [▼
"id" => 26
"user_id" => 26
"schedule_id" => 3
"start_time" => "12:00"
"end_time" => "20:00"
"created_at" => null
"updated_at" => null
"name" => "Ali Fay"
"email" => "twolff@gmail.com"
"password" => ""
"role_id" => 6
"store_id" => 3
"remember_token" => null
]

正如您所看到的,除了“id”之外,两个模型的属性都可以,即用户的 ID,而不是记录。我做错了什么?

最佳答案

具体的问题是这种情况,你在连接中有两列名为 id 的列,所以选择你需要的列并且只选择其中一个 id,可能可以很容易地解决这个问题,如果用户的列是需要的您可以根据需要进行选择。

$records = Record::with('user')
->join('users', 'users.id', '=', 'records.user_id')
->orderBy('users.name', 'asc')
->where('schedule_id', $schedule->id)
->select('records.*')
->get();

最好的解决方案是使用关系,因此如果模型类似于。

public class record
{
public function user() {
return $this->belongsTo('App\User');
}
}

然后您可以执行与以下相同的查询。 WhereHas 检查与给定条件的关系是否存在,否则如果不存在条件,则可以使用 has

Record::whereHas('user', function ($query) use($schedule){
$query->where('schedule_id', $schedule->id);
})->get()->sortBy(function($item, $key) {
return $item->user->name;
});

关于laravel - 使用连接表进行查询带来错误的 ID - Laravel,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48166234/

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