【问题标题】:Laravel push() not working, related model not savedLaravel push() 不工作,相关模型未保存
【发布时间】:2015-03-26 00:43:22
【问题描述】:

正如官方文档所说:

有时您可能希望不仅保存模型,还希望保存所有 它的关系。为此,您可以使用 push 方法:Saving A 模型和关系 $user->push();

术语表:

  • term_id
  • 姓名
  • 蛞蝓

Term_taxonomy 表:

  • term_taxonomy_id
  • term_id
  • 说明

我的术语模型:

public function TermTaxonomy(){
    return $this->hasOne('TermTaxonomy');
}

我的术语分类模型:

public function Term(){
    return $this->belongsTo('Term');
}

我的类别控制器

public  function store(){
    $data = Input::all();
    $category = new Term;
    $category->name = $data['name'];
    $category->slug = $data['slug'];
    $category->TermTaxonomy()->taxonomy = 'category';
    $category->TermTaxonomy()->description  = $data['TermTaxonomy']['description'];
    $category->push();  
}

使用上面的代码,我可以保存名称和 slug,但没有插入分类和描述。我怎么能用 push() 而不是 save() 呢?有可能吗?

谢谢,我是 Laravel 的新手。

【问题讨论】:

    标签: php class laravel laravel-4


    【解决方案1】:

    据我了解,push() 的目的是更新相关模型而不是插入它们。因为该方法只是循环遍历所有加载的相关模型并保存它们:

    public function push()
    {
        if ( ! $this->save()) return false;
    
        foreach ($this->relations as $models)
        {
            foreach (Collection::make($models) as $model)
            {
                if ( ! $model->push()) return false;
            }
        }
    
        return true;
    }
    

    所以一个用例是这样的:

    $category = Term::find(1);
    $category->name = 'foo';
    $category->TermTaxonomy->description = 'bar';
    $category->push(); // save would only update the name but not the description
    

    我建议你使用 Laravel 为 inserting related models 提供的方法:

    $category = new Term;
    $category->name = $data['name'];
    $category->slug = $data['slug'];
    $taxonomy = new TermTaxonomy();
    $taxonomy->taxonomy = 'category';
    $taxonomy->description  = $data['TermTaxonomy']['description'];
    $category->TermTaxonomy()->save($taxonomy);
    $category->save();
    

    或者,如果您的 TermTaxonomy 模型配置为批量分配,您可以使用 create()

    $category = new Term;
    $category->name = $data['name'];
    $category->slug = $data['slug'];
    $category->TermTaxonomy()->create([
        'taxonomy' => 'category',
        'description' => $data['TermTaxonomy']['description']
    ]);
    $category->save();
    

    如果您真的想使用push()。这也可以:

    $category = new Term;
    $category->name = $data['name'];
    $category->slug = $data['slug'];
    $taxonomy = new TermTaxonomy();
    $taxonomy->taxonomy = 'category';
    $taxonomy->description  = $data['TermTaxonomy']['description'];
    $category->setRelation('TermTaxonomy', $taxonomy);
    $category->push();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-12-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-01-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多