我需要填充刀片格式Model::pluck('column1', 'column2')
标记。
我知道填充选择标记的Model::pluck('column_1 && column_2', 'id')
方法。
但在我的情况下,我必须连接两列,并获取id。
之类的东西 <?php
include_once("db_connect.php");
$sql = "SELECT jid,name, description FROM jobs";
$resultset = mysqli_query($conn, $sql) or die("database error:". mysqli_error($conn));
while( $record = mysqli_fetch_assoc($resultset) ) {
?>
<div class="product-card">
<div class="product-details">
<h1 id="jid-<?php print($record['jid']); ?>" ><?php echo $record['jid']; ?></h1>
<h1 id="name-<?php print($record['jid']); ?>"><?php echo $record['name']; ?></h1>
<p id="description-<?php print($record['jid']); ?>"><?php echo $record['description'];?></p>
<input type="submit" class="btn" value="Select" id="submit-<?php echo $record['jid'];?>" />
</div>
</div>
<script type="text/javascript">
$("#submit-<?php echo $record['jid'];?>").click(function(e){
e.preventDefault();insert_job_f(<?php print($record['jid']); ?>);
});
</script>
<?php
} ?>
有可能吗?如果是,那么正确的语法是什么?
如果没有,那么最好的选择是什么?
答案 0 :(得分:12)
最佳解决方案是在您的模型中创建accessor功能,如果您想获得全名,请假设您可以这样做。
public function getFullNameAttribute()
{
return $this->first_name . ' ' . $this->last_name;
}
您可以轻松获得全名。
$users = User::where('id', 1)->get()->pluck('full_name', 'id');
Eloquent将调用getFullNameAttribute
函数并获取连接值。
答案 1 :(得分:4)
您可以使用selectRaw()
:
Model::selectRaw("CONCAT ('column1', 'column2') as columns, id")->pluck('columns', 'id');
或者您可以手动执行此操作:
$collection = Model::get(['column1', 'column2', 'id']);
foreach ($collection as $item) {
$plucked[$item->id] = $item->column1 . $item->column2;
}
dd($plucked);
答案 2 :(得分:1)
get()
方法检索的模型结果只是常规Support-Collection类的子项,因此您实际上可以访问所有相同的好东西。试试这个:
$eloquentCollection = app(YourModel::class)
->where('field', 'value')
->get(['id', 'column_1', 'column_2']);
$mapped = $eloquentCollection->mapWithKeys(function (YourModel $model) {
return [$model->id => $model->column_1 . $model->column_2];
})
答案 3 :(得分:0)
另一种简单方法:
return User::select(DB::raw('CONCAT(first_name, " - ", last_name) AS full_name, id'))
->pluck('full_name', 'id');
答案 4 :(得分:0)
来这里的人都知道,pluck方法返回一个对象,如果您想在不使用toArray
方法的情况下同时提取多个列并同时返回一个数组,则只需传递名称即可列中的all()
函数,它将以数组形式返回所需的列。
YourModelName::all('id', 'name');