laravel 关联模型中withDefault方法的作用

withDefault 方法为什么会存在?

laravel提供了非常好用的关联模型使用,正常情况下 文章对应的添加用户是存在的,如果用户表中的数据删除,那么关联模型就会返回一个null值。

就是为了解决返回null所带来问题的。

举例说明:

在没有使用withDefault方法时候:

 1 <?php
 2
 3 namespace App;
 4
 5 use Illuminate\Database\Eloquent\Model;
 6
 7 class PostsModel extends Model
 8 {
 9
10     protected $table = ‘posts‘;
11
12     protected $guarded = [];
13
14     //获取用户
15     public function user()
16     {
17         return $this->belongsTo(UserModel::class, ‘user_id‘, ‘id‘);
18     }
19
20 }

使用withDefault方法后:

PostsModel.php

 1 <?php
 2
 3 namespace App;
 4
 5 use Illuminate\Database\Eloquent\Model;
 6
 7 class PostsModel extends Model
 8 {
 9
10     protected $table = ‘posts‘;
11
12     protected $guarded = [];
13
14     //获取用户
15     public function user()
16     {
17         return $this->belongsTo(UserModel::class, ‘user_id‘, ‘id‘)->withDefault();
18      }
19
20 }

使用了 withDefault 方法以后,就会返回空对象

当使用json_encode($posts); 方法后,就会得到下面的结果:

空数组

{"id":3,"title":"test008","content":"test content","user_id":8,"created_at":"2020-02-01 15:31:21","updated_at":"2020-02-01 15:31:21","user":[]}

当然还可以传递一个默认数组,当差找不到数据的时候,直接放默认设置的数据返回:

{"id":3,"title":"test008","content":"test content","user_id":8,"created_at":"2020-02-01 15:31:21","updated_at":"2020-02-01 15:31:21","user":{"nam

e":"wangwu"}}

以上就是withDeafult 方法的使用。

如果数据找到,则正常返回

$posts = PostsModel::query()->with(‘user‘)->find(1);

{"id":1,"title":"test001","content":"test content","user_id":1,"created_at":"2020-02-01 15:16:05","updated_at":"2020-02-01 15:16:05","user":{"id"

:1,"name":"james","updated_at":"2020-02-01 15:25:08","created_at":"2020-02-01 15:25:08"}}

原文地址:https://www.cnblogs.com/songyongzhan/p/12250012.html

时间: 2024-11-10 05:23:20

laravel 关联模型中withDefault方法的作用的相关文章

Laravel关联模型中has和with区别

本篇文章给大家带来的内容是关于Laravel关联模型中has和with区别(详细介绍),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助. 首先看代码: 1 2 3 4 5 6 $userCoupons = UserCoupons::with(['coupon' => function($query) use($groupId){     return $query->select('id', 'group_id', 'cover', 'group_number', 'group_

UITextFieldDelegate协议中各个方法的作用与Xcode中AppDelegate.m中自动生成各个方法的作用(iOS)

UITextFieldDelegate协议中各个方法的作用 控制当前输入框是否能被编辑 - (BOOL)textFieldShouldBeginEditing:(UITextField *)textField 当输入框开始时触发(获得焦点触发) - (void)textFieldDidBeginEditing:(UITextField *)textField 询问输入框是否可以结束编辑(键盘是否可以收回) - (BOOL)textFieldShouldEndEditing:(UITextFiel

JAVA中toString方法的作用

因为它是Object里面已经有了的方法,而所有类都是继承Object,所以“所有对象都有这个方法”. 它通常只是为了方便输出,比如System.out.println(xx),括号里面的“xx”如果不是String类型的话,就自动调用xx的toString()方法 总而言之,它只是sun公司开发java的时候为了方便所有类的字符串操作而特意加入的一个方法 回答补充: 写这个方法的用途就是为了方便操作,所以在文件操作里面可用可不用 例子1: public class Orc { public st

ThinkPHP 关联模型中查询某条记录的父级(非查询子级)

数据表 id      cat_name      cat_pid 76     手机.数码     0 84     手机配件        76 86     蓝牙耳机        84 从属关系 : 蓝牙耳机  =>(上一级)  手机配件   =>(上一级)  手机.数码(顶级了) 关联模型 namespace Admin\Model; use Think\Model\RelationModel; class CategoryModel extends RelationModel {

laravel迁移文件中字段方法对应的数据库类型

/* *Blueprint类中的方法方法 <-> 数据库数据类型 * */ // 数字 increments();// int(10) unsigned primarykey auto_increment bigInteger();// bigint(20) unsignedBigInteger();// bigint(20) unsigned integer();// int(11) unsignedInteger();// int(10) unsigned mediumInteger();

hadoop中的方法的作用

/*  * InputFormat类:  *   * 作用:  * 1.设置输入的形式;  * 2.将输入的数据按照相应的形式分割成一个个spilts后再进一步拆分成<key,value>对作为Mapper的输入:  * 3.默认使用TextInputFormat类进行处理;  * 4.可以通过job.setInputFormatClass()方法进行设置;  *   * */ /*  * Mapper类   *   * 作用:  * 1.接受MapReduce框架处理后的<key,va

java类中final方法的作用

不给子类复写这个方法.说明你已经知道这个方法提供的功能已经满足你要求,不需要进行扩展,并且也不允许任何从此类继承的类来覆写这个方法,但是继承仍然可以继承这个方法,也就是说可以直接使用 inline扩展.允许编译器将所有对此方法的调用转化为inline调用的机制,它会使你在调用final方法时,直接将方法主体插入到调用处,而不是进行例行的方法调用,例如保存断点,压栈等,这样可能会使你的程序效率有所提高,然而当你的方法主体非常庞大时,或你在多处调用此方法,那么你的调用主体代码便会迅速膨胀,可能反而会

String中intern方法的作用

前言 读完这篇文章你可以了解,String对象在虚拟机内存中的存放,intern的作用,这么多String对象的创建到底有什么区别,String 创建的对象有几个!! 正题 先科普几个知识点1.常量池存放于方法区中 2.jdk1.6 方法区放在永久代(java堆的一部分),jdk1.7 特别将字符串常量池移动到了的堆内存中(使用参数-XX:PermSize 和-XX:MaxPermSize指定大小),jdk1.8放在单独的元空间里面(-XX:MaxMetaspaceSzie设定大小),和堆相独立

关联模型中

1 protected $_link = array( 2 'User'=>array( //'User'代表1对N中的1的表名 3 'mapping_type'=>BELONGS_TO, //关联类型 4 'mapping_name'=>'user', //'user'代表1对N中的1的表名 5 'mapping_fields'=>'username', //想要获取的字段 6 'foreign_key'=>'uid', //'uid'代表1对N中的N表中的外键名 7 'a