Laravel глобальная область с проверкой if - PullRequest
0 голосов
/ 02 апреля 2020

Поэтому я пытаюсь создать что-то вроде глобальной области видимости для моей модели, чтобы мне не приходилось go и каждый раз думал о некоторых параметрах.

Дело в том, что в настоящее время у меня есть следующее Scopes-class;

<?php

namespace App\Scopes;

use Illuminate\Database\Eloquent\Builder;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Scope;

class NeedsPaymentScope implements Scope
{

    /**
     * Apply the scope to a given Eloquent query builder.
     *
     * @param Builder $builder
     * @param Model $model
     * @return void
     */
    public function apply(Builder $builder, Model $model)
    {
        if ($model->needs_payment) {
            $builder->where('is_paid', '=', true);
        }
    }
}

И он включен в мою модель следующим образом:

protected static function boot()
    {
        parent::boot();

        static::addGlobalScope(new NeedsPaymentScope());
    }

Теперь, поскольку в классе Scope переменная $model как всегда пуста , Я не могу выполнить проверку if (что необходимо сделать!). Как мне реализовать этот лог c для каждого get(), find(); findOrFail(), ... метод?

Ответы [ 2 ]

0 голосов
/ 02 апреля 2020

попробуйте просмотреть composer глобальную область видимости переменной.

с помощью AppServiceProvider вы можете определить глобальную область видимости переменной.

public function boot(){
View::share('variable_name','your_variable_logic_code');
}

, если у вас так много строк код или лог c вы можете использовать функцию обратного вызова tooo.

теперь вы можете обращаться к переменной везде, не передавая блейд. нет совместно с (метод) без возврата к лезвию, к которому вы можете получить доступ во всем приложении.

Я думаю, что это полезно для вас.

0 голосов
/ 02 апреля 2020

Вы НИКОГДА не можете получить доступ к $model->needs_payment, потому что модель еще не подготовлена, другими словами, вы находитесь в процессе написания оператора запроса, но вы не можете получить доступ к модели, поскольку ее запрос еще не завершен.

...