У меня есть полиморфная c настройка отношений между пользователями и подрядчиками:
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);
}
}