如何使用同一个控制器将数据插入到不同的表中?

时间:2016-01-11 18:52:36

标签: php mysql laravel-5.2

我正在使用Laravel(来自CodeIgniter),我正在努力获取一个包含填充外键的表。

我有两张桌子:People& Friends

我的People表包含"名字","姓氏"等字段等

在表单底部,我可以添加一位朋友。每个朋友都可以拥有"名字","姓氏"我可以添加尽可能多的朋友。

我成功填充了我的People表,然后遍历我的朋友字段以填充我的Friends表。

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表中。我没有收到任何错误,所以我不确定自己做错了什么。

修改

以下是我的迁移在创建Friends表格时的样子。

...
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。{/ p>

编辑3

以下是我朋友模特的样子:

朋友

namespace App;

use Illuminate\Database\Eloquent\Model;

class Friend extends Model
{
    //
}

1 个答案:

答案 0 :(得分:2)

Laravel使用了很多约定。其中之一是模型的名称应该是表名的单数。对于你的朋友表,该模型应该是朋友。如果您更喜欢使用自己的命名,可以在模型中设置表格,如下所示:

protected $table = 'friends';

你的命名似乎是正确的,我不确定它为什么不起作用。