laravel 模型关联

  • 控制器
    public function index()
    {
        $lists = Region::with('admin')->paginate(15);

        return view('admin.region.index', ['lists' => $lists]);
    }
  • 模型
    public function admin ()
    {
        return $this->hasOne('App\Models\Admin','id','creator');
    }
  • 模板
<td class="text-yellow">{{ $list->admin->name }}</td>
<td class="text-yellow">{{ $list->admin?$list->admin->name:'不存在' }}</td>
  • 报错信息
    图片描述
  • 报错原因,region 中的 creatoradmin 中找不到关联的数据,返回 null图片描述
  • 模型中如何操作,让空数据不进行关联查询,只把完整的关联数据显示出来
阅读 4.4k
5 个回答

可以的. 如下:

public function admin ()
{
    return $this->hasOne('App\Models\Admin','id','creator')->withDefault();
}

withDefault() 参数为布尔, 数组, 函数.

使用withDefault()可以保证admin这个关联对象不为null, 是一个对象.

通过判断$list->admin是否为空,应该是可以处理掉的

试一下:
<td class="text-yellow">{{ is_null($list->admin->name)?'不存在':$list->admin->name}}</td>

不可能的(或者去改框架源码?),就算没有,也会返回那个字段的。
因为需要保证数据结构的一致性,就好比你给前段写接口,你不能因为某个字段值就空,就连这个键都不返回。

withDefault()在laravel中的其它版本中没有,还是判断$list->admin是否为空的好

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题