我正在为无线电新闻广播编写一个分配系统。数据表:
station
id | calls
---| -----
1 | cxri
newscast
id | name_input | for_station_id
---|------------|---------------
1 | am | 1
assignment
id | newscast_id | user_id
1 | 1 | 5
Assignment.edit的控制器如下:
if (! Gate::allows('assignment_edit'))
return abort(401);
}
$relations = [
'anchors' => \App\User::get()->pluck('name', 'id')->prepend('Please select', ''),
'casts' => \App\Newscast::get()->pluck('name_input', 'id')->prepend('Please select', ''),
];
return view('assignment.create', $relations);
新闻广播模式:
public function for_station()
{
return $this->belongsTo(Station::class, 'for_station_id')->withTrashed();
}
现在我得到了
"casts" => Collection {#451 ▼
#items: array:2 [▼
"" => "Please select"
1 => "am"
]
}
我想要
"casts" => Collection {#451 ▼
#items: array:2 [▼
"" => "Please select"
1 => "cxri-am"
]
}
我该如何实现?
或者我应该对数据进行非规范化并使name_input'cxri-am'而不是'am'?
我尝试了什么:
Laravel pluck fields from relations
'casts' => \App\Newscast::with('station')->get()->pluck('name_input', 'id'),
错误
Call to undefined relationship [station] on model [App\Newscast]
我根据Laravel: get/show data from related tables中的讨论包含了上面的新闻广播模型。基于该讨论,在我看来,新闻广播应该已经能够访问电台呼叫。但如上所示,调用不在$ casts中。
答案 0 :(得分:1)
你已经尝试过了。 with()
函数需要关系函数的名称,而不是表,因此这应该可以用于获取加载的关系模型:
'casts' => \App\Newscast::with('for_station')->get(),
至于让数据以你想要的方式连接,我会在Newscast
模型上设置accessor,它将返回你想要的数据:
function getNameInputStationAttribute() {
return $this->for_station->calls . "-" . $this->input_name;
}
然后您可以使用它:
'casts' => \App\Newscast::with('for_station')->get()->pluck('name_input_station', 'id')->prepend('Please select', ''),
如果我可以指出其他一些内容,则401
的返回代码表示Unauthenticated
,而403
表示Unauthorized
更适用于Gate
返回false。此外,类函数应该是cammel大小写,因此for_station
函数应该是forStation
,或者只是station
。