Laravel 5.2 有很多关系 - 无法访问字段

Laravel 5.2 has many relationship - can't access fields

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

User->hasMany BuyRequest

用户 table 列:

id,
userid (int),
name

BuyRequest table 列:

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');
    }

}

我的购买请求模型代码

<?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'
    ];

}

控制器 class 我访问变量的地方

<?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: []
}

我的 collection 上有零件商品,我是否正确访问了购买请求?请帮忙。

我已经尝试过 laravel 文档中的那个,请看下面。

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

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

我得到了这个输出:

正在尝试获取 属性 个 non-object

提前致谢。

在您的 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);
    }

}

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

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

好的另一种解释,select 首先是您要使用 where 语句访问购买请求的用户..... 因此,id 等于 1 的用户然后访问他的购买请求。我们不能只使用用户模型然后直接访问 buyrequest 模型,否则我们可以说这样做不切实际。

这是代码。

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

输出: "Cold Pyro Indoor Show Crackers"

这是我的关系代码。

<?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');
    }

}