Отношения Laravel в Datatables приводят к ошибке getForeignKey () - PullRequest
0 голосов
/ 13 февраля 2019

Я уже 1 день пытаюсь заставить поиск по столбцу Laravel работать по данным взаимосвязи.

У меня есть две таблицы «клиенты» и «адреса», модель «Клиент» и модель «Адрес» итакже отношения.

Тестирование отношений:

https://i.imgur.com/z8SR004.png

Отношения модели адреса:

public function customer(){
    return $this->belongsTo('App\Customer');
}

Отношения модели клиента:

public function address()
{
    return $this->hasOne('App\Address');
}

Контроллер данных:

return DataTables::of($customers)
    ->addColumn('address', function (Customer $customer) {
        return $customer->address->name;
    })
    ->make(true);

Схема адреса:

Schema::create('addresses', function (Blueprint $table) {
    $table->increments('id');
    $table->integer('customer_id')->unsigned()->index();
    $table->string('name');
    $table->string('city');
    $table->foreign('customer_id')->references('id')->on('customers')->onDelete('cascade');
    $table->timestamps();
});

Схема клиента:

Schema::create('customers', function (Blueprint $table) {
    $table->increments('id');
    $table->string('name');
    $table->string('alias');
    $table->decimal('multiplier',8,2);
    $table->string('email');
    $table->timestamps();
});

JS:

columns: [
    { data: 'id', name: 'id' },
    { data: 'name', name: 'name'},
    { data: 'address', name: 'address.name'},
    { data: 'multiplier', name: 'multiplier' },
    { data: 'created_at', name: 'created_at' }
],

Все выглядит хорошо для меня, и я действительно не могу найти проблему, когда дело доходит до фильтрации по столбцам данных отношений.

Я получаю ошибку:

Call to undefined method 
Illuminate\Database\Eloquent\Relations\HasOne::getForeignKey() 

Чтобы исправить это, добавьте ->get() к контроллеру, но это остановит пагинацию Datatable в вызове AJAX и сделает все медленнее, когда он запрашивает и выводит всю таблицу.

Прямые результаты:

http://ec2 -35-178-196-9.eu-west-2.compute.amazonaws.com (шВведите что-нибудь в нижней части столбца «Город» и нажмите клавишу «Ввод» -> проверьте вкладку «Сеть» и откройте ссылку «Ошибка AJAX 500») или просто переключайте страницы.

Как настроить поиск по столбцу Laravel для данных отношений?

1 Ответ

0 голосов
/ 13 февраля 2019
public function address() {
   return $this->hasOne('App\Address', 'customer_id', 'id');
}
public function customer() {
   return $this->belongsTo('App\Customer', 'id', 'customer_id');
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...