关于删除子模型方面,我在使用Eloquent时遇到了问题:
当在process2()
中执行此操作时,仍会保留已删除的模型,这是不正确的。
模型
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
class Model1 extends Model
{
public function seasons() {
return $this->hasMany('App\Models\Seasons', 'series_id', 'id');
}
}
服务
class Process {
public function process1($model1Instance) {
for($model1Instance->seasons() as $season) {
if(//whatever//) {
$season->delete();
}
}
}
public function process2($model1Instance) {
for($model1Instance->seasons() as $season) {
//At this point I still have the deleted instance
}
}
}
使用方法
$proc = new Process();
......
$proc->process1($model1Instance);
$proc->process2($model1Instance);
当process1()
从父级中移除一个模型时,如何在process2()
中将其删除?
尝试过/将要尝试的:
1.方法:
$model1Instance->seasons()->detach($season);
但遇到了问题:Call to undefined method Illuminate\Database\Query\Builder::detach()
2.另一个类 我可以创建另一个简单类来存储这些内容,但我认为这并不是好的方案,虽然我可以设置筛选后的季节,但仍需使用Model1实例:
class Model1Copy {
private $seasons;
public function __construct($seasons) {
$this->seasons = $seasons;
}
}
Fatal when tried:
public function process1($model1Instance) {
for($model1Instance->seasons() as $season) { if(//whatever//) { $season->delete(); } else { $childs[]=$season; } } $model1Instance->seasons = $childs
}
Would be to make my own repositories to skip the ORM`s behavior, but it is frustrating because I have to rewrite all queries just to remove an instance...
$season->delete()
调用失败了,因为这个 Season 有一个到 Model1 的映射。首先解除它的关联,然后再删除它。 - John Bupit