如何使用同一个控制器将数据插入不同的表中?
How can I insert data into different tables using the same controller?
我正在使用 Laravel(来自 CodeIgniter),我正在努力获取包含填充外键的 table。
我有两个 table:People
& Friends
我的 People
table 有 "First Name"、"Last Name" 等字段
在我的表单底部,我可以添加一个朋友。每个好友可以有一个"First Name","Last Name"等,我可以加多少好友。
我正在成功填充我的 People
table,然后循环遍历我的朋友字段以填充我的 Friends
table.
MyController.php
if ($person->save()) { // Save the primary record.
// check if there are any friends to save.
$friendsArray = array_filter($input['friend']);
if (empty($friendsArray)) {
// No friends to insert.
} else {
$friend = new Friend();
$friend->person_id = $person->id;
$friend->friend_data = json_encode(array('friend' => $input['friend']));
$friend->save();
}
}
如果我注销 $friend,我会正确地看到所有内容。例如,
[attributes:protected] => Array
(
[person_id] => 4
[friend_data] => {"friend":{"firstName":"Tyler","lastName":"Durden","address":"12345 Street","city":"My City","state":"CA","zip":"12345"}}
)
只是没有插入我的 Friend
table。我没有收到任何错误,所以我不确定自己做错了什么。
编辑
这是我创建 Friends
table.
的迁移方式
...
Schema::create('friends', function (Blueprint $table) {
$table->increments('id');
$table->integer('person_id')->unsigned();
$table->foreign('person_id')->references('id')->on('people');
$table->text('friend_data');
$table->timestamps();
});
编辑 2
逐行查看后,我在我的网络选项卡中看到了这个:
Base table or view not found: 1146 Table 'myapplication.friend' doesn't exist
所以这告诉我某处有拼写问题。系统正在寻找 friend
而它应该是 friends
.
编辑 3
这是我朋友模型的样子:
朋友
namespace App;
use Illuminate\Database\Eloquent\Model;
class Friend extends Model
{
//
}
Laravel 使用了很多约定。其中之一是模特的名字应该是 table 名字的单数形式。对于你的朋友 table,模型应该是 Friend。如果您更喜欢使用自己的命名,可以像这样在模型中设置 table:
protected $table = 'friends';
你的命名似乎是正确的,我不确定为什么它不起作用。
我正在使用 Laravel(来自 CodeIgniter),我正在努力获取包含填充外键的 table。
我有两个 table:People
& Friends
我的 People
table 有 "First Name"、"Last Name" 等字段
在我的表单底部,我可以添加一个朋友。每个好友可以有一个"First Name","Last Name"等,我可以加多少好友。
我正在成功填充我的 People
table,然后循环遍历我的朋友字段以填充我的 Friends
table.
MyController.php
if ($person->save()) { // Save the primary record.
// check if there are any friends to save.
$friendsArray = array_filter($input['friend']);
if (empty($friendsArray)) {
// No friends to insert.
} else {
$friend = new Friend();
$friend->person_id = $person->id;
$friend->friend_data = json_encode(array('friend' => $input['friend']));
$friend->save();
}
}
如果我注销 $friend,我会正确地看到所有内容。例如,
[attributes:protected] => Array
(
[person_id] => 4
[friend_data] => {"friend":{"firstName":"Tyler","lastName":"Durden","address":"12345 Street","city":"My City","state":"CA","zip":"12345"}}
)
只是没有插入我的 Friend
table。我没有收到任何错误,所以我不确定自己做错了什么。
编辑
这是我创建 Friends
table.
...
Schema::create('friends', function (Blueprint $table) {
$table->increments('id');
$table->integer('person_id')->unsigned();
$table->foreign('person_id')->references('id')->on('people');
$table->text('friend_data');
$table->timestamps();
});
编辑 2
逐行查看后,我在我的网络选项卡中看到了这个:
Base table or view not found: 1146 Table 'myapplication.friend' doesn't exist
所以这告诉我某处有拼写问题。系统正在寻找 friend
而它应该是 friends
.
编辑 3
这是我朋友模型的样子:
朋友
namespace App;
use Illuminate\Database\Eloquent\Model;
class Friend extends Model
{
//
}
Laravel 使用了很多约定。其中之一是模特的名字应该是 table 名字的单数形式。对于你的朋友 table,模型应该是 Friend。如果您更喜欢使用自己的命名,可以像这样在模型中设置 table:
protected $table = 'friends';
你的命名似乎是正确的,我不确定为什么它不起作用。