【问题标题】:how to use Laravel Eloquent push() function?如何使用 Laravel Eloquent push() 函数?
【发布时间】:2014-07-23 14:51:16
【问题描述】:

我正在努力使用 laravel push() 函数

我的代码在这里:

$company = new Company(array('name' => 'Company 1'));
$company->persons[] = new Person(array('name' => 'Company 1 Person 1', 'mobile' => 12345));
$company->persons[] = new Person(array('name' => 'Company 1 Person 2', 'mobile' => 112233));
$company->push();

当它被存储时: 公司存储好,但对于公司人员,它存储company_id0

Larave 文档说:

有时您可能希望不仅保存模型,还希望保存它的所有 关系。为此,您可以使用 push 方法:

$user->push();

怎么了?

【问题讨论】:

  • 我以前从未使用过push(),但您似乎没有正确使用它。文档没有太多提及它。见this question
  • 我感觉 push 只适用于预定义的关系,不能创建新记录。

标签: php laravel-4 eloquent


【解决方案1】:

这不是教义;)

push 可以做到,但它不会很好和容易(您可以在下面找到方法)

您可以这样做(简单而简单的方法):

// still you need already existing Company, so save it first
$company = new Company(array('name' => 'Company 1'));
$company->save();

$company->persons()->createMany(array(
  array('name' => 'Company 1 Person 1', 'mobile' => 12345),
  array('name' => 'Company 1 Person 2', 'mobile' => 12345)
));

这将保存新的Person 模型并将它们与Company 关联


push 可以完成这项工作,但前提是您使用已经存在的父模型并首先关联子模型:

$company = Company::first(); // or any existing

$person = new Person(array('name' => 'Company 1 Person 1', 'mobile' => 12345));
$person->company()->associate($company);

$anotherPerson = new Person(array('name' => 'Company 1 Person 2', 'mobile' => 12345));
$anotherPerson->company()->associate($company);

$company->persons[] = $person;
$company->persons[] = $anotherPerson
$company->push();

显然这是更多的工作,这绝对不是我建议的方式。

【讨论】:

  • @decoz,那你不同意 doc 中写的那行很混乱吗?他们说“您可能不仅希望保存模型,还希望保存它的所有关系”???
  • 我不会对此争论。然而,准确地说,Eloquent 正在保存这些模型,只是它没有将它们与关系父级关联,这显然是出乎意料的。就像我说的,这不是教义。它以不同的方式处理关系,有时您会期望更多,但这就是它目前的工作方式。
  • 哈哈哈!!!当然第二种方法根本不是首选。简而言之,push() 只能与现有的一起使用。我不知道createMany 方法。谢谢!
  • @JarekTkaczyk 您的回答非常有用。我有一个问题,如果我在您的第一个示例 $company->persons 中调用它会延迟加载?我的意思是会查询数据库还是它在内存中?
猜你喜欢
  • 1970-01-01
  • 2021-08-05
  • 2022-01-16
  • 1970-01-01
  • 2021-03-20
  • 2014-07-19
  • 2019-10-19
  • 1970-01-01
  • 2018-09-09
相关资源
最近更新 更多