关于冲突id 字段的过滤器替换了模型id 字段和计算字段中的$this->id 来自另一个表,而不是来自模型。所以解决方案是重复->select([...]) 查询(相同!)来自具有别名的模型的值。例如(用userid别名解决user.id字段)
型号
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Notifications\Notifiable;
class User extends Model
{
//...
public function scopeMyScope($query, int $userId) : bool
{
return $query
->select('user.id', 'user.id as userid'/*,...*/)
->[...];
}
//...
过滤器
<?php
namespace App\Nova\Filters;
use Illuminate\Container\Container;
use Illuminate\Http\Request;
use Laravel\Nova\Filters\Filter;
class MyFilter extends Filter
{
//...
public function apply(Request $request, $query, $value)
{
//Same select fields as in model with userid, dont skip select in the filter!
return $query
->select('user.id', 'user.id as userid'/*,...*/)
->[...];
}
//...
资源
<?php
namespace App\Nova;
use App\Nova\Filters\MyFilter;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Log;
use Laravel\Nova\Fields\Boolean;
use Laravel\Nova\Fields\HasMany;
use Laravel\Nova\Fields\ID;
use Laravel\Nova\Fields\Text;
class User extends \App\Nova
{
//...
public function fields(Request $request)
{
return [
//userid
Boolean::make('some', function () {
return \App\Models\User::myScope($this->userid);
}),
];
}
//...
}