У меня был установлен метод доступа в моей модели Eloquent, который работал нормально, но соответствующий запрос к базе данных запускался один раз для каждого экземпляра модели, которую я создал. На моей странице индекса это означало 5 дюжин запросов.
<?php
class Thingy extends Model {
protected $appends = ["parentType"];
public function getParentTypeAttribute($value) {
return self::where("type"=>$this->type, "parent"=>1)->value("name");
}
}
class ThingyController extends Controller {
public function index() {
$thingys = Thingy::all();
return view("things.index", compact("thingys"));
}
}
Для краткого объяснения: в одной таблице базы данных есть два класса "thingy", причем этот класс обозначается логическим значением с именем "parent". Я хочу получить имя родителя, когда я получаю доступ к ребенку. Я знаю, что это должно быть две таблицы, но это не так.
Я хотел уменьшить количество операций чтения из базы данных, поэтому вместо этого я попытался изменить их на отношения. Я подумал, что таким образом я смогу воспользоваться энергичной загрузкой.
<?php
class Thingy extends Model {
public function parent() {
return $this->hasOne("Thingy", "id")->where("type"=>$this->type, "parent"=>1);
}
}
class ThingyController extends Controller {
public function index() {
$thingys = Thingy::with(["parent"]);
return view("things.index", compact("thingys"));
}
}
Проблема в том, что в методе отношений $this
является пустым экземпляром модели, в отличие от средства доступа, поэтому $this->type
является нулевым.
Есть ли способ доступа к свойствам модели, с которой я работаю, из метода отношений?