从Laravel Eloquent集合中取消设置/删除关系对象

时间:2018-09-11 14:22:01

标签: laravel eloquent

我通过以下方式获取Laravel Eloquent集合:

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

并获得$product的转储为

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: ...
}

我需要从此集合中取消设置关系对象merchantpicture

我尝试了以下选项,但失败了:

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

任何帮助将不胜感激。

预先感谢

3 个答案:

答案 0 :(得分:8)

在Laravel 5.6.25中,您可以使用unsetRelation()

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

在此之前:

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

答案 1 :(得分:2)

您可以取消设置

unset($product->merchant);

答案 2 :(得分:0)

  

我必须使用具有相同字段的表。所以我需要检查   基于值的不同列。所以如果外键的值是   同样需要取消该关系

如果模型中有merchant个属性(表中的merchant列),则可以使用$product->getOriginal('merchant')$product->getAttribute('merchant')

获取它的值。