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');
}
}
我已经阅读了关于 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');
}
}