Unset/Remove relation object from Laravel Eloquent collection

可紊 提交于 2020-01-14 23:27:27

问题


I've a fetch a Laravel Eloquent collection by:

$product = Product::query()->with(['merchant', 'picture'])->where('id', $id)->first();

and get the dump of $product is

Product {
  #casts: ...
  #dates: ...
  #connection: "mysql"
  #table: null
  #primaryKey: "id"
  #keyType: "int"
  +incrementing: true
  #with: []
  #withCount: []
  #perPage: 15
  +exists: true
  +wasRecentlyCreated: false
  #attributes: array:1 [
    "id" => 27
  ]
  #original: ...
  #changes: []
  #dateFormat: null
  #appends: []
  #dispatchesEvents: []
  #observables: []
  #relations: array:2 [
    "merchant" => Merchant {...}
    "picture" => Picture {...}
    }
  ]
  #touches: []
  +timestamps: true
  #hidden: []
  #visible: []
  #fillable: []
  #guarded: ...
}

I need to unset the relation object merchant and picture from this collection.

I've tried following options but failed:

unset($product['merchant']);
unset($product->merchant);

Any help will be appreciate.

Thanks in advance


回答1:


In Laravel 5.6.25, you can use unsetRelation():

$product->unsetRelation('merchant')->unsetRelation('picture');

Before that:

$relations = $product->getRelations();
unset($relations['merchant'], $relations['picture']);
$product->setRelations($relations);



回答2:


I have to tables with the same fields.. So I need to check the different column based on value. So if the value of foreign key is same then need to unset that relation

If you have merchant property in the model (merchant column in the table) you can get it value using $product->getOriginal('merchant') or $product->getAttribute('merchant')



来源:https://stackoverflow.com/questions/52278128/unset-remove-relation-object-from-laravel-eloquent-collection

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!