Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/258.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Laravel:如何创建新行并将其附着到模型_Php_Laravel - Fatal编程技术网

Php Laravel:如何创建新行并将其附着到模型

Php Laravel:如何创建新行并将其附着到模型,php,laravel,Php,Laravel,我目前有2个模型/表格 Table1Model; Table2Model; table_1 table_2 现在一个Table1模型有一个Table2模型,一个Table2模型可以附加到多个Table1模型 我的关系如下 在我的Table1模型中: public function table_2(){ return $this->belongsTo(Table1Model::class); } 在我的Table2模型中: public function table_1(){

我目前有2个模型/表格

Table1Model;
Table2Model;

table_1
table_2
现在一个Table1模型有一个Table2模型,一个Table2模型可以附加到多个Table1模型

我的关系如下

在我的Table1模型中:

public function table_2(){
    return $this->belongsTo(Table1Model::class);
}
在我的Table2模型中:

public function table_1(){
    return $this->hasMany(Table2Model::class);
}
我在将Table2模型附加到Table1模型时遇到了问题(visa卡也一样,但我不会走另一条路),我目前的做法是在Table1模型中使用此方法

public function setTable2($table_2)
{
    $this->table_2_id = ($table_2->id);
    $this->save();
}
这感觉有点笨重,正确的方法是什么?我在Laravel文档中迷失了方向,试图找到答案

Table1Model::find(1)->table2()->associate(Table2Model::find(1))->save()
Table2Model::find(1)->table1()->save(Table1Model::find(1))

您可以在此处找到模式信息:

希望这将启发您如何利用这些关系

$record = Table2Model::find(1); 
// Returns an ActiveRecord of Table2

dd(record->table_1);
// I think of dd as a friendlier version of var_dump and die
// table_1 being the relationship name, you can see all records that are
// related to that model.
// (you may need to add 'table_1' to $visible property in the Table2Model),
您可以使用以下命令插入Table1模型(与Table2模型相关):

$record = Table2Model::find(1);
$record->table_1()->create($arrayOfTable1Data);
您还可以通过对关系执行
->delete()
来删除与Table2Model相关的所有Table1Model记录(在获取其ActiveRecord之后)

另一方面,由于您提供的示例(Table2Model有许多Table1Model,这意味着您不能在没有Table2记录的情况下插入Table1Model)而不是那么简单。如果外键可为空,则可以:

$record = Table1Model::create($arrayOfTable1Data);
arrayOfTable1Data['table2_id'] = $record->table_2()->create($arrayOfTable2Data)->id;
$record->table_1()->update($arrayOfTable1Data);
个人说明:
我喜欢将其他模型的名称命名为关系名称,并根据其是否有1个依赖项或多个依赖项将其命名为单数或复数(例如,名为user或users的关系)。

您如何调用
setTable2
以及您是否尝试在控制器中附加任何代码?这里没有控制器,只是单元测试atm,所需的一切都在帖子里。是的,我想会有更好的方法,我会坚持我写的函数。你的方式最容易使用。但是当使用多对多关系时,您可以使用
Table1Model::find(1)->table2()->sync([1,2,3])
或->attach(1)不使用多对多,并且您混合了您的答案,顺便说一句,它应该是
Table1Model::find(1)->table2()->associate(Table2Model::find(1))->save()
如果您想编辑它,我忘了保存。谢谢我现在感觉自己就像一个mong,
$record->table_1()->create($ArrayFTable1Data)是我想要的,但它完全逃过了我的记忆,很好的一个!
$record = Table1Model::create($arrayOfTable1Data);
arrayOfTable1Data['table2_id'] = $record->table_2()->create($arrayOfTable2Data)->id;
$record->table_1()->update($arrayOfTable1Data);