Php Laravel 5.4:无法从关系中检索数据
我试图通过将每个名称存储在来自两个联合表(访问和报告)的数组中来显示每个票据的受让人的名称(用户表中的外键),但它会给我这个错误。错误例外 未定义的属性:stdClass::$assigneePhp Laravel 5.4:无法从关系中检索数据,php,mysql,database,laravel,relationships,Php,Mysql,Database,Laravel,Relationships,我试图通过将每个名称存储在来自两个联合表(访问和报告)的数组中来显示每个票据的受让人的名称(用户表中的外键),但它会给我这个错误。错误例外 未定义的属性:stdClass::$assignee //HomeController $accesses = DB::table('accesses') ->select(array('id', 'fullname','emp_id','shift','state','resolved_at', 'closed
//HomeController
$accesses = DB::table('accesses')
->select(array('id', 'fullname','emp_id','shift','state','resolved_at', 'closed_at','assigned_to'))
->where('state','=','Assigned');
$all = DB::table('reports')
->select(array('id', 'fullname','emp_id','shift','state','resolved_at', 'closed_at','assigned_to'))
->union($accesses)
->where('state', '=', 'Assigned')
->get();
$names[] = array();
foreach ($all as $one)//store in array to display in a chart
{
$names[] = $one->assignee->name; //error here
}
//Report Model
public function assignee()
{
return $this->belongsTo(User::class, 'assigned_to');
}
//Access Model
public function assignee()
{
return $this->belongsTo(User::class, 'assigned_to');
}
//Report Migration
public function up()
{
Schema::create('reports', function (Blueprint $table) {
$table->increments('id');
$table->integer('user_id')->nullable();
$table->string('fullname');
$table->string('emp_id');
$table->string('shift');
$table->longText('report');
$table->string('status')->default('Pending'); //Pending, Approved
$table->string('state')->default('Open'); //Open, Assigned, Resolved, Closed
$table->date('resolved_at')->nullable();
$table->date('closed_at')->nullable();
$table->integer('assigned_to')->nullable();
$table->longText('action')->nullable();
$table->timestamps();
});
}
//Access Migration
public function up()
{
Schema::create('accesses', function (Blueprint $table) {
$table->increments('id');
$table->integer('user_id')->nullable();
$table->string('fullname');
$table->string('emp_id');
$table->string('shift');
$table->string('request');
$table->longText('note')->nullable();
$table->string('status')->default('Pending'); //Pending, Approved
$table->string('state')->default('Open'); //Open, Assigned, Resolved, Closed
$table->date('resolved_at')->nullable();
$table->date('closed_at')->nullable();
$table->integer('assigned_to')->nullable();
$table->longText('action')->nullable();
$table->timestamps();
});
}
您应该使用
合并
收集方法:
$accesses = Access::select(array('id', 'fullname','emp_id','shift','state','resolved_at', 'closed_at','assigned_to'))
->where('state','=','Assigned')
->get();
$reports = Report::select(array('id', 'fullname','emp_id','shift','state','resolved_at', 'closed_at','assigned_to'))
->where('state', '=', 'Assigned')
->get();
$all = $accesses->merge($reports);
但是,如果我使用Elount,联合将无法工作,因为表的列数不同。更新了我的答案,它可能会对您有所帮助@GrantGubatan@GrantGubatan这行不通。雄辩的集合根据模型主键合并结果。如果两个结果集中存在相同的主键,则会覆盖它们。您使用的是
DB
facade,而不是查询模型。因此,你将无法访问任何关系。你只想知道受让人的姓名吗?如果是,为什么要查询所有字段?如果没有,请在问题中添加更多信息。