Laravel使用模型中的自定义方法

时间:2018-06-29 10:18:30

标签: php laravel

我正在使用Laravel 5.6。我有一个users表和firstnamelastname字段。

在我的User模型中,我也具有此功能

public function name()
{
    return $this->firstname . ' ' . $this->lastname;
}

现在在另一个控制器中,我想与所有用户一起创建一个下拉菜单。但我想显示name(),而不仅要显示名字/姓氏。

我目前正在使用

$users = \App\User::pluck('lastname', 'id');
return view('myview', compact('MY_collection' , 'users'));

在我看来(使用collective/html

{!! Form::select('user', $users, isset($user) ? $MY_collection->user: null,  ['class' => 'form-control']) !!}        

是否可以将pluck与方法功能一起使用?还是我应该做些其他事情?

我也知道accessor解决方案,但是我在数据库中没有name属性,因此它不起作用。

3 个答案:

答案 0 :(得分:1)

除了声明访问者名称以“ get ”开头并以 Attribute camelCase)结尾: getFullNameAttribute > === 全名

您应该将访问器添加到 $ appends

protected $appends=['<your Accessor name>']
//protected $appends=['full_name']
//usage:
//$this->full_name

$ appends 数组使访问者可以追加到模型的数组形式。

然后使用它:

collect(json_decode($modelName->tojson(),true))->pluck('full_name','id') 

答案 1 :(得分:0)

访问者可以是您选择的任何名称,它们只需以get开头并以Attribute结尾:

public function getNameAttribute() {
    return $this->firstname . ' ' . $this->lastname;
}

$user->name

// this will give the result as above
public function getBlahBlahBlahAttribute() {
    return $this->firstname . ' ' . $this->lastname;
}

$user->blah_blah_blah

这两种方法都应该可以采摘。

User::get()->pluck('name');

$user->setAppends(['name']);
$user->pluck('name');

答案 2 :(得分:0)

您可以像这样串联名字和姓氏。

$user = App\User::select(DB::raw('CONCAT(firstname, ", ", lastname) AS full_name'),'id')->pluck('full_name','id');