【发布时间】:2015-12-16 05:25:10
【问题描述】:
我在 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;
}
}
-
尝试时致命:
公共函数 process1($model1Instance) {
for($model1Instance->seasons() as $season) { if(//whatever//) { $season->delete(); } else { $childs[]=$season; } } $model1Instance->seasons = $childs}
我会创建自己的存储库来跳过 ORM 的行为,但这很令人沮丧,因为我必须重写所有查询才能删除一个实例...
【问题讨论】:
-
我猜
$season->delete()调用失败了,因为该季节映射到 Model1。先分离再删除。 -
delete 方法工作正常,但在父模型中仍然可用,并在 process2() 中结束
标签: php eloquent laravel-5.1