【问题标题】:Laravel 5.2 has many relationship - can't access fieldsLaravel 5.2 有很多关系 - 无法访问字段
【发布时间】:2016-03-16 03:54:44
【问题描述】:

我已经阅读了有关 eloquent 关系的文档以及有关它的在线不同文章。但似乎我很难访问表关系的字段。请指教。

User->hasMany BuyRequest

用户表列:

id,
userid (int),
name

BuyRequest 表列:

id,
buyrequest_id,
userid (int)

这里是我的用户模型的代码,

use Illuminate\Database\Eloquent\Model;
use Illuminate\Foundation\Auth\User as Authenticatable;
use App\BuyRequest;
class User extends Authenticatable
{
    /**
     * The attributes that are mass assignable.
     *
     * @var array
     */
    protected $fillable = [
        'name', 'email', 'password','userid',
    ];

    /**
     * The attributes excluded from the model's JSON form.
     *
     * @var array
     */
    protected $hidden = [
        'password', 'remember_token',
    ];

    public function buyRequest(){
        return $this->hasMany(BuyRequest::class,'userid','userid');
    }

}

我的 buyRequest 模型代码

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;
use Illuminate\Support\Facades\DB;
use App\User;
class BuyRequest extends Model
{
    //
    protected $table = 'buyrequest';

    protected $fillable = [
        'buyrequest_id'
    ];

}

我正在访问变量的控制器类

<?php

namespace App\Http\Controllers;

use App\User;
use Illuminate\Http\Request;

use App\Http\Requests;
use App\Http\Controllers\Controller;
use App\Http\Requests\ProductPostRequest;
use App\Products;
use Illuminate\Support\Facades\DB;
use App\BuyRequest;
use App\Http\Requests\RFQRequest;
use App\ProductCategory;

class TaskController extends Controller
{

    public function show(Request $request){

        $user = new User();
        $buyrequest = $user->buyRequest();

        dump($buyrequest->getResults());
    }

}

输出:

Collection {#241 ▼
  #items: []
}

我的收藏品为零,我是否可以正确访问购买请求?请帮忙。

我已经在 laravel 文档中尝试过,请参见下文。

$buyrequest1 = User::find(1)->buyrequest;

        foreach ($buyrequest1 as $br) {
            dump($br->title);
        }

我得到这个输出:

试图获取非对象的属性

提前谢谢你。

【问题讨论】:

    标签: laravel-5 eloquent relational-database


    【解决方案1】:

    在您的 BuyRequest 模型中添加列名称 userid,如下所示:

    use Illuminate\Database\Eloquent\Model;
    use Illuminate\Foundation\Auth\User as Authenticatable;
    use App\BuyRequest;
    class User extends Authenticatable
    {
       /**
       * The attributes that are mass assignable.
       *
       * @var array
       */
       protected $fillable = [
           'name', 'email', 'password','userid',
       ];
    
        /**
         * The attributes excluded from the model's JSON form.
         *
         * @var array
         */
        protected $hidden = [
            'password', 'remember_token',
        ];
    
        public function buyRequest(){
            return $this->hasMany(BuyRequest::class,'userid','userid');
        }
    
    }
    

    并按如下方式访问它:

    class TaskController extends Controller
    {
    
        public function show(Request $request){
    
            $user = User::with('buyRequest')->where('userid','1')->firstOrFail();
    
            dump($user[0]->buyRequest[0]->title);
        }
    
    }
    

    【讨论】:

    • 您好,感谢您的回答,我刚刚尝试过,仍然无法访问任何字段,我的收藏总数仍然为零。
    • 能否在用户模型类中添加belongsTo或belongsToMany而不是hasMany /// like:--- public function buyRequest(){ return $this->belongsTo(BuyRequest::class,'userid ','用户身份'); }
    • 我尝试了 belongsTo 并且我的总集合仍然为零,对于 belongsToMany,结果是... SQLSTATE[42S02]: Base table or view not found: 1146 Table 'heroku_7775a568a08e5ba.userid' does '不存在 (SQL: select buyrequest.*, userid.userid as pivot_userid, userid.buy_request_id as buy_request_id from buyrequest inner join userid @9876534 id = userid.buy_request_id 其中userid.userid 为空)
    • 我的代码是 public function buyRequest(){ return $this->belongsToMany(BuyRequest::class,'userid','userid'); }
    • 嗨,我试过你的回答,结果如下。 BelongsTo {#230 ▼ #foreignKey: "userid" #otherKey: "userid" #relation: "user" #query: Builder {#238 ▶} #parent: BuyRequest {#236 ▶} #related: User {#229 ▶} }。如何访问用户字段? ..顺便说一句,我认为的答案与我想要实现的相反。我想从 User 模型访问所有 buyRequest 字段。今天我将再次检查我的代码并发布我的更新。
    【解决方案2】:

    好的,一天之后。我想我找到了我要找的东西。感谢@Nadimul De Cj 帮助我尝试其他选项并帮助我解决问题。

    基本上,在您可以访问用户的购买请求之前,您应该首先过滤您要输出的购买请求访问权限。

    好的另一种解释,首先使用 where 语句选择您要访问购买请求的用户.....所以,id 等于 1 的用户然后访问他的购买请求。我们不能只使用 user 模型然后直接访问 buyrequest 模型,或者我们可以说这不切实际。

    这是代码。

    $user = User::where('userid','1')->firstOrFail();
            dump($user->buyrequest['0']->title);
    

    输出: “Cold Pyro 室内表演饼干”

    这是我的关系代码。

    <?php
    
    namespace App;
    
    use Illuminate\Database\Eloquent\Model;
    use Illuminate\Foundation\Auth\User as Authenticatable;
    use App\BuyRequest;
    class User extends Authenticatable
    {
    
     public function buyRequest(){
            return $this->hasMany(BuyRequest::class,'userid','userid');
        }
    
    }
    

    【讨论】:

      猜你喜欢
      • 2015-10-13
      • 1970-01-01
      • 2023-04-06
      • 2017-02-17
      • 1970-01-01
      • 2014-07-10
      • 1970-01-01
      • 2016-07-16
      • 2015-08-05
      相关资源
      最近更新 更多