首页 Order Laravel 正文

Laravel 模型的关联写入

金鹏头像 金鹏 Laravel 2022-04-01 14:04:24 0 273
导读:一.关联写入1.新增有三种方式,我们一一来看,比如给一个用户增加关联书籍;//先限定用户$user =User ::find(19);//给这个用户关联的b...
.关联写入

1. 新增有三种方式,我们一一来看,比如给一个用户增加关联书籍;

//先限定用户

$user = User ::find(19);

//给这个用户关联的book 新增一条记录

//user_id 会自动写入 19title 自定

$user->book()->save(new Book([ 'title ' => '《哈利波特》  ']));

2.  需要设置批量赋值,我们取消掉,book 表没有时间字段,也要取消自动写入

//取消批量赋值

protected $guarded = [];

//取消自动时间字

public $timestamps = false;

 

//批量新增

$user->book()->saveMany([

new Book([ 'title ' => '《哈利波特》  ']),

new Book([ 'title ' => '《指环王》  '])

]);

 

3.  create  createMany 只需要插入数组即可完成关联新增

$user->book()->create([

'title ' =>  '《哈利波特》  '

]);

 

$user->book()->createMany([

[ 'title ' => '《哈利波特》  '],

[ 'title ' => '《指环王》  ']

]);

 

PS还有 findOrNewfirstOrNewfirstOrCreate  updateOrCreate 方法;

 

4. 有新增, 自然有修改删除,直接使用 delete() update()方法即可;

//关联删除,删除 user_id=19 的书

$user = User ::find(99);

$user->book()->delete();

//关联修改,修改 user_id=19 的书

$user = User ::find(99);

$user->book()->update([ 'title ' => '《修改书籍》  ']);

5. 使用 associate()方法来修改掉书籍关联的用户,即修改 user_id

//修改关联的外键,即 user_id 修改,换用

$user = User ::find(20);

$book = Book ::find(11);

$book->user()->associate($user);

$book->save();

 

PS:如果想消一本书的拥有者,比如将 user_id 设置为 null,字段要设置可以 null $book = Book ::find(11);

$book->user()->dissociate();

$book->save();

 

6. 搜索书籍的对应用户的时候,空 null 字段会导致用户出现 null 数据;

7. 我们可以采用空对象默认模型的方式,去解决这个问题

//Book.php

public function user()

{

return $this->belongsTo(User ::class, 'user_id ', 'id ')

->withDefault([

'id ' => 0,

'username '  =>  '游客用户 '

]);

                   }


本文地址:https://www.jinpeng.work/?id=176
若非特殊说明,文章均属本站原创,转载请注明原链接。
广告3

欢迎 发表评论:

  • 请填写验证码

日历

«    2025年4月    »
123456
78910111213
14151617181920
21222324252627
282930

控制面板

您好,欢迎到访网站!
  查看权限
广告2

退出请按Esc键