Laravel ORM 的问题

控制器代码

    public function index()
    {
        $user = Users::find(1);
        dd($user->orders());
        --------------------------------------------------------------------------------------------
        $orders = Auth::guard('admin')->user()->orders();
        dd($orders);

    }

模型代码:

<?php

namespace App\Model;

use Illuminate\Database\Eloquent\Model;
use Illuminate\Foundation\Auth\User;
use App\Model\Orders;

class Users extends User
{
    public $timestamps = false;
    public $table = 'users';

    public function  orders()
    {
        return $this->hasMany(Orders::class,'id','accout_id');
    }
}

分割线上下执行结果

laravel orm的问题

laravel orm的问题

不懂其中的原因,对orders()与orders的异同也有少许的不明白

《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
讨论数量: 7

order orders??

4年前 评论

$xxx 是一个 model,$xxx() 是一个 relation (比如: hasMany、ManyToMany 等等)。

$user->orders() 得到的是一个 relation ,$user->orders 得到的就是 collection ,也就是这个用户的订单组成的 collection。
$orders = Auth::guard('admin')->user()->order() 这个语句是错误的,不能在 relation 上调用 relation ,正确的写法是 $orders = Auth::guard('admin')->user->order(),这里就可以得到一个 relation,或者 $orders = Auth::guard('admin')->user->orders ,这里就会得到这个用户的订单组成的 collection 。

4年前 评论
张无忌

@青风百里 $orders = Auth::guard('admin')->user->orders();这个也不对

4年前 评论
张无忌

@pigzzz 上面写错了 已纠正

4年前 评论

@张无忌 这里得到的是 relation ,如果想要的得到订单,正确的写法是 $orders = Auth::guard('admin')->user->orders

4年前 评论

如果是 $model->orders() 返回的是一个查询构造器,,后面可以接着做查询,最后得手动调用 get|paginate|first 等查出结果:$model->orders()->where(xxx)->groupBy(xx)->get();

如果是 $model->orders 返回的是已经查询出来的 Orders 模型实例的集合(Collection 类),,,

最后就是 $model->orders()->get() 差不多等同于 $model->orders,,,

4年前 评论
张无忌

问题已解决,谢谢各位了

4年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!