Laravel ::采用多列

时间:2018-03-09 07:24:40

标签: laravel laravel-5

我需要填充刀片格式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 } ?>

有可能吗?如果是,那么正确的语法是什么?

如果没有,那么最好的选择是什么?

5 个答案:

答案 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');
相关问题