Ошибка запроса Laravel Eloquent: неопределенный столбец в полиморфной связиPhp

Кемеровские программисты php общаются здесь
Ответить
Anonymous
 Ошибка запроса Laravel Eloquent: неопределенный столбец в полиморфной связи

Сообщение Anonymous »

Следующий код выдает ошибку с помощью WhereHasMorph и возвращает все данные без применения условия, когда WhereHas используется в полиморфной связи. Кто-нибудь знает, в чем проблема?

Код: Выделить всё

            $personQuery = Person::query();
$column = 'value';
$needle = '%09133333%';
$personQuery->orWhereHasMorph('digitalContacts', '*', function ($contactQuery) use ($column, $needle) {
$contactQuery->where($column, 'like', '%' . $needle . '%');
});

$data =  $personQuery->get();
ошибка:

Код: Выделить всё

{
"success": false,
"payload": [],
"errors": [
{
"type": "warning",
"code": "42703",
"message": "SQLSTATE[42703]: Undefined column: 7 ERROR:  column \"digital_contactable_type\" does not exist\nLINE 1: select distinct \"digital_contactable_type\" from \"people\"\n                        ^ (Connection: tenant, SQL: select distinct \"digital_contactable_type\" from \"people\")"
}
]
}
Полученное сообщение об ошибке указывает на то, что столбец «digital_contactable_type» не существует в таблице «люди». но он должен искать digital_contactable_type в таблице digital_contacts, а не людей!
отношения определяются в таких моделях:

Код: Выделить всё

class Person extends Model
{
public function digitalContacts()
{
return $this->morphMany(DigitalContact::class, 'digital_contactable', 'digital_contactable_type');
}
//...

}

Код: Выделить всё

class DigitalContact extends Model
{
public function digitalContactable()
{
return $this->morphTo();
}
//...

}

и связанные столбцы в таблицах определяются следующим образом:

Код: Выделить всё

        Schema::create('people', function (Blueprint $table) {

$table->unsignedBigInteger('id', true);
//...
$table->timestamps();
});

Код: Выделить всё

        Schema::create('digital_contacts', function (Blueprint $table) {
$table->unsignedBigInteger('id', true);
$table->unsignedBigInteger('digital_contactable_id');
$table->string('digital_contactable_type'); // person, organization, etز
$table->string('value');
//...
$table->timestamps();
});
есть идеи?


Подробнее здесь: https://stackoverflow.com/questions/784 ... lationship
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Php»