В настоящее время я работаю над веб-приложением, которое было настроено с использованием шаблона проектирования репозитория / сервисного уровня, то есть у меня есть сервисный слой, который выполняет любую необходимую бизнес-логику перед запуском каких-либо методов в репозитории. У меня есть фасады для каждой из моих моделей, которые имеют доступ к соответствующим слоям обслуживания, и в большинстве случаев это нормально. Однако теперь, когда я пытаюсь установить отношения Eloquent, кажется, что фасады вызывают сильную головную боль, так как я не уверен, в каком направлении мне идти.
Возьмите следующий код:
class Account extends Eloquent {
// Our table name
protected $table = "accounts";
// Our primary key
protected $primaryKey = "id";
/**
* Role Relationship
*
* Returns a list of roles associated with
* this account
*/
public function roles() {
return $this->hasMany('Role');
}
}
Это не будет работать как есть, потому что вместо использования класса сущности Role он использует Role Facade. Я нашел обходной путь для этого, установив псевдоним для сущности с немного другим именем, например, RoleEntity, чтобы
public function roles() {
return $this->hasMany('RoleEntity');
}
будет работать, однако это не кажется самым оптимальным решением.
Мой вопрос, с практикой все в порядке? Или еще лучше, должно ли это происходить вообще? И если нет, как я могу это исправить / где я ошибся?
У вас есть два класса с одинаковыми именами в одном пространстве имен. Используйте разные пространства имен, чтобы вы могли использовать одни и те же имена классов.
Я обычно использую \ Models, чтобы найти мои модели классов.
В верхней части каждого файла модели:
namespace Models;
В вашем контроллере или любой части вашего приложения:
\Models\Role::first();
Обратите внимание, что изменение пространства имен в вашей модели потребует от вас добавления пространств имен других классов, т. Е. Str, Eloquent, Url, Redirect и т. Д.
use Eloquent;
use URL;
В вашей модели вы также должны передать пространства имен в функции отношений, т.е.
public function roles() {
return $this->hasMany('\Models\Role');
}
Других решений пока нет …