Предотвращение доступа Laravel, когда выполняется запрос только для некоторого столбца - PullRequest
0 голосов
/ 21 февраля 2020

Я сделал аксессор для форматирования даты в моей табличной модели, и эта модель выглядит так, как аксессор

class Agent  Authenticatable implements MustVerifyEmail
{
    protected $appends = ['created_at_formatted'];

    ...

     public function getCreatedAtformattedAttribute()
     {
         return $this->created_at->format('d-m-Y');
     }
   ...
}

, с этим нет проблем, если я получу все данные из таблицы,

, но проблема возникает, если я беру только некоторые данные, например, я беру только phone и email для указания пользователя c, а столбец created_at не задействован,

и мой запрос на контроллере выглядит следующим образом:

    public function getAgentDetail($id)
    {
        $agDetail = Agent::where('id','=' ,50)->get(['phone','email']);
        return response()->json($agDetail);
    }

, и приведенный выше запрос выдает мне ошибку:

Symfony\Component\Debug\Exception\FatalThrowableError

Call to a member function format() on null

и я думаю, что это потому, что аксессору не было дано никакого значения (в данном случае created_at), поэтому я изменяю аксессор на моей модели следующим образом:

    public function getCreatedAtformattedAttribute()
    {
         $this->created_at
                ? $this->created_at->format('d-m-Y')
                : null;
    }

это только дает условие если он не установлен, он вернет нулевое значение. Ошибка исчезнет и вернет эту коллекцию:

[
  {
    phone: "086741111111",
    email: "example@jab.com",
    created_at_formatted: null
  }
]

Что я хочу, так это как игнорировать включенный метод доступа, когда выбирается только указать столбец, которому нечего сделать с аксессором,

например, я просто хочу получить phone и email, а не для created_at_formatted

1 Ответ

2 голосов
/ 21 февраля 2020

Удалите следующую строку и повторите попытку:

protected $appends = ['created_at_formatted'];

Вы можете вызывать Acessor, не добавляя их. Также вы можете изменить имя функции на getCreatedAtFormattedAttribute, чтобы соблюдать соглашение Laravel.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...