【发布时间】:2020-02-29 21:15:27
【问题描述】:
我在用户和承包商之间建立了多态关系:
Schema::create('users', function (Blueprint $table) {
$table->bigIncrements('id');
$table->string('first_name');
$table->string('last_name');
$table->morphs('user');
});
Schema::create('contractors', function (Blueprint $table) {
$table->bigIncrements('id');
//... etc
});
应用\用户
public function userable()
{
return $this->morphTo();
}
应用\承包商
public function user()
{
return $this->morphOne('App\User', 'userable');
}
我们的目标是拥有不同的用户类型,因为承包商可能有我们需要收集的其他字段数据,但他们将始终拥有用户表中的所有字段。
我遇到的问题是,在获取所有承包商并急切加载用户数据时,如何按用户表中的 last_name 列排序?
class ContractorController extends Controller
{
public function all(Request $request)
{
return Contractor::with('user')->paginate(15); // order by users.last_name here
}
}
我读到我必须加入表,但由于某种原因,响应中的用户对象返回 NULL。
class ContractorController extends Controller
{
public function all(Request $request)
{
return Contractor::with('user')
->join('users', 'contractors.id', '=', 'users.userable_id')
->paginate(15);
}
}
【问题讨论】:
标签: laravel eloquent eager-loading