Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/laravel/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Laravel 拉雷维尔口若悬河地谈了几段关系_Laravel_Laravel 5_Eloquent_Relationship - Fatal编程技术网

Laravel 拉雷维尔口若悬河地谈了几段关系

Laravel 拉雷维尔口若悬河地谈了几段关系,laravel,laravel-5,eloquent,relationship,Laravel,Laravel 5,Eloquent,Relationship,我为示例简化了三个模型(用户请求获取电话): 用户 身份证 登录 请求 身份证 用户id 电话号码 电话 身份证 名字 关系如下: 在用户模型中: public function requests() { return $this->hasMany('App\Requests'); } public function phoneRequests() { return $this->belongsTo('App\Requests'); // But

我为示例简化了三个模型(用户请求获取电话):

  • 用户

    • 身份证
    • 登录
  • 请求

    • 身份证
    • 用户id
    • 电话号码
  • 电话

    • 身份证
    • 名字
  • 关系如下:

    用户模型中

    public function requests()
    {
        return $this->hasMany('App\Requests');
    }
    
    public function phoneRequests()
    {
        return $this->belongsTo('App\Requests');
        // But it returns null
    }
    
    手机型号中

    public function requests()
    {
        return $this->hasMany('App\Requests');
    }
    
    public function phoneRequests()
    {
        return $this->belongsTo('App\Requests');
        // But it returns null
    }
    
    我需要从用户模型开始收集所有请求的手机(我需要它们的名称)。问题是电话号码在请求模型中,而在文档中则相反

    我找不到任何关系来实现我的目标

    理想情况是通过以下关系:

    Auth::user()->requests->phoneRequests
    // Would returns the phone name the user has requested
    

    我还尝试使用原始SQL查询,但我更喜欢使用关系。如何做到这一点?

    您的
    请求中应该有一个电话关系模型,如下所示:

    public function phone()
    {
        return $this->belongsTo('App\Phone');
    }
    
    因此,现在您可以通过手机为用户获取所有请求,如下所示:

    $user->requests->first()->phone; // this is for the first request, but you can get the phone for each request in a loop, I guess you know how to do that.
    
    还要注意的是,您在手机模型中的关系是错误的,因此会得到null。这一个应该再次在用户中有多个,因为根据您的表结构,手机可以有多个请求

    在您的
    手机
    型号中,您应该具备以下功能:

    public function requests()
    {
        return $this->hasMany('App\Requests', 'phone_id');
    }
    
    因为根据您的数据库结构,手机可以属于许多请求。

    感谢的评论,我的问题的解决方案是:

    /**
     * Returns all requests made by this client
     * @return Collection
     */
    public function requests()
    {
        return $this->hasMany('App\Requests');
    }
    
    /**
     * Returns all the phones requested by the client
     * @return Collection
     */
    public function phones()
    {
        return $this->belongsToMany('App\Phone', 'phone_request');
        // where phone_request is the name of the pivot table (App\Requests)
    }
    

    另外,我邀请您(用法语)咨询,这很好地解释了与模式的关系。

    Jonas是对的,这是用户和电话之间的
    归属关系,请求是连接表。在这里查看我的答案:@newUserName02+1在你的答案上,这对我帮助很大!我将回答这个问题。解决方案非常简单。我只是照着文件做的,但心里有你的答案,谢谢你。我什么都试过了。它总是返回null。我觉得这种关系没有发生。你能更新你的答案吗?因为我不理解最后一点。你可以调试什么是
    Auth::user()->请求
    返回?谢谢你的好答案,我找到了一个更好的解决方案。