Laravel, как игнорировать аксессуар

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

class Order extends GSModel{ $appends = ['orderContents']; public function getOrderContentsAttribute() { return $this->contents()->get(); } } 

Но теперь, в одном случае, мне нужно получить только некоторые поля, без этого OrderContents .

 $openOrders = Order::open()->has('contents')->get(['id','date','tableName']); 

Но, делая это таким образом, он возвращает мне OrderContents . Есть ли способ не получить это поле?

Благодаря!

Невозможно сделать это за один раз, так что вот что вам нужно:

 $openOrders = Order::open()->has('contents')->get(['id','date','tableName']); $openOrders->each(function ($order) { $order->setAppends([]); }); // or using collection magic: $openOrders->each->setAppends([]); - $openOrders = Order::open()->has('contents')->get(['id','date','tableName']); $openOrders->each(function ($order) { $order->setAppends([]); }); // or using collection magic: $openOrders->each->setAppends([]); 

Разочарование того, что люди здесь дали вам ложную информацию. На самом деле существует встроенный метод достижения этого, написанный прямо в класс Illuminate\Database\Eloquent\Model , называемый Model::getOriginal .

Чтобы получить атрибут foo , игнорируя его accessor, определенный в Model::getFooAttribute , просто вызовите $myModel->getOriginal('foo'); , Этот метод определен в строке 3087 Illuminate\Database\Eloquent\Model .

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

Хорошо, я не говорю, что это хорошее решение, но оно работает, и вы обойдетесь с помощью цикла …

Добавьте это в свою модель:

 public static $withoutAppends = false; protected function getArrayableAppends() { if(self::$withoutAppends){ return []; } return parent::getArrayableAppends(); } 

Затем, когда вы хотите отключить свойства $appends :

 Order::$withoutAppends = true; $openOrders = Order::open()->has('contents')->get(['id','date','tableName']);