laravel插入多个表

don*_*ame 0 php laravel

我有2张桌子

#something - id, name, url
#something_users - id, id_something, email, password
Run Code Online (Sandbox Code Playgroud)

我的模特

class Something extends Eloquent
{

    protected $table = 'something';

    protected $fillable = ['name', 'email', 'password'];

    public $errors;


    public function User()
    {
        return $this->belongsTo('User', 'id', 'id_something');
    }
}

class User extends Eloquent implements UserInterface, RemindableInterface {

    use UserTrait, RemindableTrait;


    protected $table = 'something_users';

    protected $hidden = array('password', 'remember_token');

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

}
Run Code Online (Sandbox Code Playgroud)

调节器

$input = Input::all();

// also some validation
$this->db->fill($input);

$this->db->password = Hash::make(Input::get('password'));

$this->db->push();

$this->db->save();
Run Code Online (Sandbox Code Playgroud)

SQL

insert into `something` (`name`, `email`, `password`) values...
Run Code Online (Sandbox Code Playgroud)

我需要将名称插入第一个表(某物)和电子邮件,密码插入第二个(something_users)

怎么做?我对此有所了解.

use*_*496 10

你的关系有点搞砸了,你可能想要改变它们.注意hasMany()VS的belongsTo().如果a something只能有一个user,你可能希望将函数更改为hasOne()from hasMany()和函数的名称,user()只是因为它更有意义.

class Something extends Eloquent {

    protected $table = 'something';

    public function users()
    {
        return $this->hasMany('User', 'id_something');
    }
}

class User extends Eloquent implements UserInterface, RemindableInterface {

    use UserTrait, RemindableTrait;

    protected $table = 'something_users';

    protected $hidden = array('password', 'remember_token');

    public function something()
    {
        return $this->belongsTo('Something', 'id_something');
    }
}
Run Code Online (Sandbox Code Playgroud)

然后保存a something和a user并将它们链接起来,这很容易.

$something = new Something;
$something->name = Input::get('name');
$something->url = Input::get('url');
$something->save();

$user = new User;
$user->email = Input::get('email');
$user->password = Hash::make(Input::get('password'));

$something->users()->save($user);
Run Code Online (Sandbox Code Playgroud)

我没有看到你的构造函数所以我不知道哪个模型$this->db引用,但你可能想要替换somethingsusers取决于你拥有的.为了保持你的依赖注入,我建议你的依赖项命名它们实际上是什么.

class SomeController extends BaseController {

    public function __construct(User $user, Something $something)
    {
        $this->user = $user;
        $this->something = $something;
    }

    public function someFunction()
    {
        $this->something->name = Input::get('name');
        $this->something->url = Input::get('url');
        $this->something->save();

        $this->user->email = Input::get('email');
        $this->user->password = Hash::make(Input::get('password'));
        $this->something->users()->save($this->user);
    }
}
Run Code Online (Sandbox Code Playgroud)