Joh*_*kij 6 php mysql select laravel eloquent
我想知道如何创建一个名为"type"的默认变量,并在Laravel中执行select连接时将值设置为"car".
到目前为止,这是我的代码:
$items = DB::table('items')->orderBy('created_at', 'desc')
->join('items_categories', 'items.item_category_id', '=', 'items_categories.category_id')
->select(
'items.id as items___item_id',
'items.item_title as items___item_title',
'items_categories.id as items_categories___category_id',
'items_categories.title as items_categories___category_title',
)
->take(20);
Run Code Online (Sandbox Code Playgroud)
这很好用.但是,我需要为此选择的每个记录获取/添加自定义键和值,以便稍后我可以在模板中使用它来进一步过滤内容.
所以,我需要在print_r中添加一个名为so 的键type
,car
我会在每个记录中看到type => car,我可以在我的代码中使用它.
怎么做?
我可以把那个somhow放在选择中吗?
喜欢:
->select(
'items.id as items___item_id',
'items.item_title as items___item_title',
'items_categories.id as items_categories___category_id',
'items_categories.title as items_categories___category_title',
//something like this?
'type' = 'car'
)
Run Code Online (Sandbox Code Playgroud)
因为现在我得到这个:
Array
(
[0] => stdClass Object
(
[items___item_id] => 10
[items___item_user_id] => 2
[items___item_title] => A new blue truck
[items_categories___category_id] => 1
[items_categories___category_title] => Truck
)
[1] => stdClass Object
(
[items___item_id] => 11
[items___item_user_id] => 2
[items___item_title] => VW Tiguan
[items_categories___category_id] => 1
[items_categories___category_title] => SUV
)
Run Code Online (Sandbox Code Playgroud)
我希望得到这个:
Array
(
[0] => stdClass Object
(
[items___item_id] => 10
[items___item_user_id] => 2
[items___item_title] => A new blue truck
[items_categories___category_id] => 1
[items_categories___category_title] => Truck
[type] => car
)
[1] => stdClass Object
(
[items___item_id] => 11
[items___item_user_id] => 2
[items___item_title] => VW Tiguan
[items_categories___category_id] => 1
[items_categories___category_title] => SUV
[type] => car
)
Run Code Online (Sandbox Code Playgroud)
如果可能,不是在模型文件中,而是在一次查询期间,因为只需要一次我需要进行此修改.
W. *_*Dan 14
您可以使用此方法:
$data = DB::table('items')
->Select('items.id as items___item_id',
'items.item_title as items___item_title');
# Add fake column you want by this command
$data = $data->addSelect(DB::raw("'fakeValue' as fakeColumn"));
$data = $data->orderBy('items.id')->get();
Run Code Online (Sandbox Code Playgroud)
好好享受!
Rob*_*eca 11
您将希望为您的 items 表创建一个模型并以这种方式查询它。使用 eloquent,您可以通过将列名添加到 $appends 属性然后定义模型属性来动态创建列。
php artisan make:model Item
Run Code Online (Sandbox Code Playgroud)
任何模型都会自动查找作为模型名称复数形式的表(Item 查找“items”)。在 Item 模型中,添加以下几行
/**
* Append custom columns to the model
*
* @var array
*/
protected $appends = ['type'];
/**
* Define the type column to every Item object instance
*
* @return string
*/
public function getTypeAttribute()
{
return 'car';
}
Run Code Online (Sandbox Code Playgroud)
现在更新您的查询以使用模型而不是 DB::select。确保使用控制器顶部的模型
use App\Item;
....
$items = Item::orderBy('created_at', 'desc')
->join('items_categories', 'items.item_category_id', '=', 'items_categories.category_id')
->select(
'items.id as items___item_id',
'items.item_title as items___item_title',
'items_categories.id as items_categories___category_id',
'items_categories.title as items_categories___category_title',
)
->take(20)->get();
Run Code Online (Sandbox Code Playgroud)
当使用模型返回集合与 DB::select 时,您需要添加 get() 作为最终方法。
归档时间: |
|
查看次数: |
14907 次 |
最近记录: |