Laravel 分离不适用于 belongsToMany
Laravel detach not working on belongsToMany
我有这个型号:Company
其中有一个关系:$this->belongsToMany('App\CallList', 'call_list_companies', 'company_id', 'call_list_id')
反之亦然:CallList
关系:$this->belongsToMany('App\Company', 'call_list_companies', 'call_list_id', 'company_id')
我可以将 Company
附加到 CallList
但是我无法从 CallList
中分离出 Company
这是为什么?
我用于分离公司的代码:
$company->call_lists()->detach($call_list);
我也试过另一种方式:
$call_list->companies()->detach($company);
当我这样做时它只是returns null。
我检查了公司和呼叫列表都存在,并且数据库中两者之间存在关系。
有人知道我做错了什么吗?
我也没有收到任何错误或任何东西。
如果值得一提,我还使用了关系的枢轴 table。
将关系查询过滤为仅具有匹配 ID 的呼叫列表,然后呼叫 detach()
。
尝试:
$company->call_lists()->where('id', $call_list->id)->detach();
我遇到过类似或相同的问题,并且在过去 2 年中遇到过两次。
我发现该关系使用了软删除并导致了这个问题。
我的关系 belongsToMany
使用 Pivot
class.
use Illuminate\Database\Eloquent\Relations\Pivot;
use Illuminate\Database\Eloquent\SoftDeletes;
class EntityUser extends Pivot
{
use SoftDeletes; // it makes the problem
// some code
}
table 有列 deleted_at
。但是问题是SoftDeletes
class.
当我运行 $user->entities()->detach($entity)
它返回1
这意味着一条记录被触摸或删除,但table 和实际结果没有变化。
我删除了 SoftDeletes
并且成功了。我还从 table.
中删除了该列
解决方案
- 从枢轴 class 中删除
SoftDeletes
。 Laravel 没有官方支持。 https://github.com/laravel/nova-issues/issues/2750
- 从枢轴 table 中删除
deleted_at
。 https://laravel.com/docs/9.x/migrations#available-command-aliases
我有这个型号:Company
其中有一个关系:$this->belongsToMany('App\CallList', 'call_list_companies', 'company_id', 'call_list_id')
反之亦然:CallList
关系:$this->belongsToMany('App\Company', 'call_list_companies', 'call_list_id', 'company_id')
我可以将 Company
附加到 CallList
但是我无法从 CallList
Company
这是为什么?
我用于分离公司的代码:
$company->call_lists()->detach($call_list);
我也试过另一种方式:
$call_list->companies()->detach($company);
当我这样做时它只是returns null。 我检查了公司和呼叫列表都存在,并且数据库中两者之间存在关系。
有人知道我做错了什么吗? 我也没有收到任何错误或任何东西。
如果值得一提,我还使用了关系的枢轴 table。
将关系查询过滤为仅具有匹配 ID 的呼叫列表,然后呼叫 detach()
。
尝试:
$company->call_lists()->where('id', $call_list->id)->detach();
我遇到过类似或相同的问题,并且在过去 2 年中遇到过两次。
我发现该关系使用了软删除并导致了这个问题。
我的关系 belongsToMany
使用 Pivot
class.
use Illuminate\Database\Eloquent\Relations\Pivot;
use Illuminate\Database\Eloquent\SoftDeletes;
class EntityUser extends Pivot
{
use SoftDeletes; // it makes the problem
// some code
}
table 有列 deleted_at
。但是问题是SoftDeletes
class.
当我运行 $user->entities()->detach($entity)
它返回1
这意味着一条记录被触摸或删除,但table 和实际结果没有变化。
我删除了 SoftDeletes
并且成功了。我还从 table.
解决方案
- 从枢轴 class 中删除
SoftDeletes
。 Laravel 没有官方支持。 https://github.com/laravel/nova-issues/issues/2750 - 从枢轴 table 中删除
deleted_at
。 https://laravel.com/docs/9.x/migrations#available-command-aliases