【问题标题】:Proper syntax for Laravel Eloquent insert/updateLaravel Eloquent 插入/更新的正确语法
【发布时间】:2018-12-11 07:08:49
【问题描述】:

我有一个看似简单的问题,经过几天的浏览仍然无法解决。 假设我有 Debitur 模型。

class Debitur extends Model
{
    protected $table = 'debiturs';
    protected $fillable = [
        'name', 'address',
    ];

    public function debiturWife(){
        return $this->hasOne('App\DebiturWife');
    }
}

我有一个 DebiturWife 模型。

class DebiturWife extends Model
{
    protected $table = 'debitur_wifes';
    protected $fillable = [
        'nama', 'address', 'photo',
    ];

    public function debitur(){
        return $this->belongsTo('App\Debitur');
    }
}

我可以像这样在 DebiturController 中获取 Debitur 和 DebiturWife 数据:

return Debitur::with('debiturWife')->find($debitur_id);

现在我想创建一个新的 Debitur 和 DebiturWife,我该怎么做? 类似的东西

$debitur = new Debitur;
$debitur->name = $request->name;
$debitur_wife = new Debitur.DebiturWife; //obviously doesn't work

【问题讨论】:

  • Debitur 和 DebiturWife 数据库表的架构是什么?
  • 借记卡 (id | name | address )。 DebiturWife(id | debitur_id | 姓名 | 地址 | 照片)。

标签: laravel eloquent insert foreign-keys relationship


【解决方案1】:
$debitur = new Debitur;
$debitur->name = $request->name;
$debitur->save();

$debitur_wife = new DebiturWife([
    'name' => 'Foo'
]);

$debitur->debiturWife()->save($debitur_wife);

Documentation

如果以后我想根据 Debitur 的 id 更新 DebiturWife 怎么办?

$debitur = Debitur::with('debiturWife')->find($id);
$debitur->debiturWife->name = 'new name';
$debitur->debiturWife->address = 'new address';
$debitur->save();

【讨论】:

  • 如果以后我想根据 Debitur 的 id 更新 DebiturWife 怎么办?我试过这个但不起作用 $debitur = Debitur::with('debiturWife')->find($id); $debiturWife = debiturWife::where('debitur_id',$id)->update($request->all()); $debitur->debiturWife()->保存($debiturWife);
  • 文档比较混乱,看了好几遍了。
【解决方案2】:

你可以这样做:

$debitur = new Debitur;
$debitur->name = $request->name;
$debitur->save();

$debitur->debiturWife()->create([
   'name' => $request->name,
   'address' => $request->address,
   'photo' => $request->photo
]);

另一种方法是——

$debiturWife = new DebiturWife();
$debiturWife->name = $request->name;
$debiturWife->address = $request->address;
$debiturWife->photo = $request->photo;

$debitur->debiturWife()->save($debiturWife);

debitur_id 将被自动设置。 createsave 方法之间的唯一区别是 create 方法接受一个普通的 PHP 数组,而 save 方法接受一个 DebitureWife 的实例

请参阅documentation 以获得更好的理解。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-06-13
    • 2016-04-19
    • 2020-05-08
    • 2017-11-17
    • 2019-08-01
    • 1970-01-01
    • 2019-05-25
    • 2015-09-19
    相关资源
    最近更新 更多