gpt4 book ai didi

php - Eloquent sortBy() 访问器不排序

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

我需要能够通过访问器定义的属性来订购集合。我正在努力解决这个问题,我真的不明白为什么它不能正常工作。

以下是我的代码的一些片段:

web.php

Route::get('/dashboard', 'HomeController@dashboard')->name('dashboard');

HomeController.php

public function dashboard()
{
$drivers = User::whereHas('roles', function($q){
$q->where('slug', 'driver');
})->get();

$sorteddrivers = $drivers->sortBy('last_free_time');

$rides = Ride::all();
return view('dashboard')->with('rides', $rides)->with('drivers', $sorteddrivers);
}

User.php

function getLastFreeTimeAttribute($driver_id)
{
return UserController::lastFreeTime($driver_id);
}

UserController.php

public static function lastFreeTime($driver_id)
{
// $result = Ride::with('driver')->orderBy('arrival','desc')->first();
$result = DB::table('rides')
->join('users', 'users.id', '=', 'rides.user_id')
->select('rides.arrival')
->where('users.id','=',$driver_id)
->orderBy('rides.arrival', 'asc')
->first();

if (is_null($result)) {
return "";
} else {
return \Carbon\Carbon::parse($result->arrival)->format('H:i');
}
}

dashboard.blade.php

<tbody>
@foreach($drivers as $driver)
<tr>
<td>{{ $driver->name }}</td>
<td>{{ App\Http\Controllers\UserController::lastFreeTime($driver->id) }}</td>
<td>
@if( \App\Http\Controllers\UserController::isDriving($driver->id) )
<span class="bg-danger text-white p-1"><i class="fa fas fa-car fa-lg"></i> Busy</span>
@else
<span class="bg-success text-white p-1"><i class="fa fas fa-car fa-lg"></i> Free</span>
@endif
</td>
</tr>
@endforeach
</tbody>

最后一个代码的第 8 行应该是有序的,但事实并非如此。有任何想法吗?提前致谢。

最佳答案

不支持将参数传递给 get...Attribute() 函数(至少据我所知),但支持 $this,它引用当前的 User (称为 $driver),因此您可以重构:

public function getLastFreeTimeAttribute(){ 
return UserController::lastFreeTime($this->id);
}

sortBy() 方法工作正常,但由于 last_free_timenull,因此它没有执行任何值得注意的操作。现在应该可以正常工作了。

关于php - Eloquent sortBy() 访问器不排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55242254/

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