Я хотел написать что-то, что позволит мне отмечать похожие объекты того же класса. Для этого я использовал одну таблицу:
Similar
- id
- object_id
- similar_id
- similar_type
- timestamps
Similar_id - это объект, который похож на object_id.
Мой класс Similar имеет два отношения морфа:
class Similar extends Model
{
use SoftDeletes;
protected $dates = ['deleted_at'];
public function similar()
{
return $this->morphTo();
}
public function object()
{
return $this->morphTo();
}
}
Теперь класс, который может иметь сходство с отношениями.
class Example extends Model
{
public function similar()
{
return $this->morphMany(Similar::class, 'similar','similar_type', 'similar_id');
}
public function object()
{
return $this->morphMany(Similar::class, 'object', 'similar_type', 'object_id');
}
}
Когда я вызываю $similar->similar
($similar instanceof Similar
), я получаю связанный объект правильного класса, однако, когда я использую $similar->object
, я получаю ошибку
Column not found: 1054 Unknown column 'similars.' in 'where clause' (SQL: select * from `similars` where `similars`.`` = 17 and `similars`.`deleted_at` is null limit 1)
Также, когда я пытаюсь отладить отношение $ Similar-> object () с помощью dd (), я вижу, что: #morphType: "object_type"
есть ли способ перезаписать его на Similar_type? Может быть, дело в этом?
РЕДАКТИРОВАТЬ: Когда я добавляю object_type в аналогичную таблицу и изменяю object()
сопоставление отношений в классе Example
, он работает как задумано, но есть ли способ сохранить это один столбец? Я спрашиваю из-за соображений производительности и ненужной избыточности.
Я хотел бы использовать один столбец с типом для обоих отношений Morph.
Буду признателен за любую помощь.
Если название поста неуместно, измените его.