Laravel по-русски

Русское сообщество разработки на PHP-фреймворке Laravel.

Ты не вошёл. Вход тут.

#1 10.01.2017 13:21:27

Уточняющее hasMany и with

Добрый день!
Есть модель Page

    protected $fillable = ['sysname', 'content'];

    public function vars() {
        return $this->hasMany('App\PageVar', 'page_id');
    }

    public function getVar($var) {
        $page_var = $this->hasMany('App\PageVar', 'page_id')->where('var', $var)->first();
        return ($page_var ? $page_var->value : null);
    }

и связанная с ней PageVar

    protected $fillable = ['page_id', 'var', 'value'];

    public static $rules = ['var' => 'sysname'];

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

Служат для того чтобы управлять, контентом на статичных страницах. В pages основное содержание, в page_vars мелкие фразы на странице.

Обращаюсь к этому в шаблонах так:

{{$page->getVar('services')}}

Но в этом случае не отрабатывает

with('vars')

И для каждого getVar, выполняется запрос в базу.
Вообще getVar создал потому что в случае

{{$page->vars->where('var', 'services')->first()->value}}

если services не создана, то выскакивает ошибка.
Помогите, как это правильно организовать?

Не в сети

#2 10.01.2017 14:42:12

Re: Уточняющее hasMany и with

Загружай страницы сразу с pageVar:

Page::with('vars')->find($id);

Потом:

{{ $page->vars->where('var', 'services')->first()->value }}

Изменено AlexeyMezenin (10.01.2017 16:09:27)

Не в сети

#3 10.01.2017 15:12:04

Re: Уточняющее hasMany и with

AlexeyMezenin пишет:

Загружай страницы сразу с pageVar:

    Page::with('vars')->find($id);

Потом:

    {{ $page->vars->where('var', 'services')->first()->value }}

Вначале так и пробовал, но в этом случае если services не существует(а по контексту такое возможно), тогда будет ошибка

Trying to get property of non-object

Не в сети

#4 10.01.2017 16:11:03

Re: Уточняющее hasMany и with

Если не все var заполнены, значит нужно добавить проверку:

{{ empty($page->vars->where('var', 'services')->first()) ? 'Empty' : $page->vars->where('var', 'services')->first()->value }}

Изменено AlexeyMezenin (10.01.2017 16:11:18)

Не в сети

Подвал раздела