Laravel雄辩道:“关系败坏”

时间:2018-08-02 13:21:17

标签: php laravel laravel-5 eloquent

我需要能够获得包括其软删除元素在内的Models Relationship,但仅限于此1个实例。我不想更改模型,以便每次使用关系时也返回所有软删除的记录。

我该如何实现?

用户模型

class User extends Authenticatable
{
  public function contacts(){
    return $this->hasMany('App\Contacts','user_id','id');
  }
}

控制器

$user = User::findOrFail($id);
//Need to be able to get the trashed contacts too, but only for this instance and in this function
$user->contacts->withTrashed(); //Something like this
return $user;

我怎么只能在控制器内部这次获得被废弃的行?

谢谢

3 个答案:

答案 0 :(得分:4)

您可以通过多种方式使用withTrashed方法。

要将通话与您的关系相关联,您可以执行以下操作:

public function roles() {
    return $this->hasMany(Role::class)->withTrashed();
}

要即时使用相同的内容:

$user->roles()->withTrashed()->get();

对于您的特殊情况:

$user->contacts()->withTrashed()->get();

答案 1 :(得分:0)

您可以执行以下操作:

$user = User::findOrFail($id);

$user->contacts()->withTrashed()->get(); //get all results

return $user;

使用()调用关系时,可以附加withTrashed()方法。之后,您需要get()结果。

答案 2 :(得分:0)

查看{{3}}上的Laravel文档:

//The withTrashed method may also be used on a relationship query: 
$flight->history()->withTrashed()->get(); 

问题是使用$user->contacts向用户返回联系人的相关记录的集合,而$user->contacts()将进行新的查询。