这真让我抓狂。
\n\n我有两个表:记录和用户以及一个带用户记录的查询:
\n\n$records = Record::with(\'user\')\n ->join(\'users\', \'users.id\', \'=\', \'records.user_id\')\n ->orderBy(\'users.name\', \'asc\')\n ->where(\'schedule_id\', $schedule->id)\n ->get();\nRun Code Online (Sandbox Code Playgroud)\n\n这dd($records);给我带来了这个:
Collection {#827 \xe2\x96\xbc\n #items: array:6 [\xe2\x96\xbc\n 0 => Record {#773 \xe2\x96\xbc\n #connection: "mysql"\n #table: null\n #primaryKey: "id"\n #keyType: "int"\n +incrementing: true\n #with: []\n #withCount: []\n #perPage: 15\n +exists: true\n +wasRecentlyCreated: false\n #attributes: array:13 [\xe2\x96\xbc\n "id" => 26\n "user_id" => 26\n "schedule_id" => 3\n "start_time" => "12:00"\n "end_time" => "20:00"\n "created_at" => null\n "updated_at" => null\n "name" => "Ali Fay"\n "email" => "twolff@gmail.com"\n "password" => ""\n "role_id" => 6\n "store_id" => 3\n "remember_token" => null\n ]\nRun Code Online (Sandbox Code Playgroud)\n\n正如您所看到的,除了“id”之外,两个模型的属性都可以,即用户的 ID,而不是记录。我做错了什么?
\n具体问题是这种情况,您在连接中有两列名为 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();
Run Code Online (Sandbox Code Playgroud)
最好的解决方案是使用关系,所以如果是model类似的东西。
public class record
{
public function user() {
return $this->belongsTo('App\User');
}
}
Run Code Online (Sandbox Code Playgroud)
然后您可以执行与以下相同的查询。WhereHas检查与给定条件的关系是否存在,否则如果不存在条件,则has可以使用。
Record::whereHas('user', function ($query) use($schedule){
$query->where('schedule_id', $schedule->id);
})->get()->sortBy(function($item, $key) {
return $item->user->name;
});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3004 次 |
| 最近记录: |