php - Laravel 有很多分离

标签 php eloquent laravel-5.1

我在 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;
    }
}
  1. 尝试时致命:

    公共(public)函数 process1($model1Instance) {

    for($model1Instance->seasons() as $season) {
        if(//whatever//) {
            $season->delete();
        } else {
        $childs[]=$season;
        }
    }
    $model1Instance->seasons = $childs
    

  2. 本来可以创建自己的存储库来跳过 ORM 的行为,但这令人沮丧,因为我必须重写所有查询才能删除一个实例...

最佳答案

删除 hasMany 条件的记录:

$model1Instance->seasons()->where('condition', 'met')->delete();

全部删除:

$model1Instance->seasons()->delete();

关于php - Laravel 有很多分离,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32662569/

相关文章:

php - 两列 where 子句用逗号合并

php - 我怎样才能只运行一次 Laravel 队列?

PHP Laravel Eloquent,foreach 破坏了我的关系

php - 在 Laravel 中创建星级百分比

mysql - Laravel 5.1 DBQuery 连接

php - Laravel Controller 中的单元测试索引函数

PHP : Convert a blob into an image file

PHP 尝试使用命名空间函数(不是类)

php - 使用 PHP 创建表并从 MySQL 填充

php - 如何选择值等于的列?