[英]Add a new column with a value to the select query in Laravel
我想知道如何在 Laravel 中進行選擇連接時創建一個名為“type”的默認變量並將值設置為“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);
這很好用。 但是,我需要為此選擇的每條記錄獲取/添加自定義鍵和值,以便稍后在模板中使用它來進一步過濾內容。
因此,我需要添加一個名為type
且值為car
的鍵,因此在 print_r 中我將看到每條記錄的 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'
)
因為現在我得到了這個:
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
)
我想得到這個:
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
)
如果可能,不在模型文件中,而是在一次查詢中,因為只有一次我需要完成此修改。
您可以使用此方法:
$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();
好好享受!
您將希望為您的 items 表創建一個模型並以這種方式查詢它。 使用 eloquent,您可以通過將列名添加到 $appends 屬性然后定義模型屬性來動態創建列。
php artisan make:model Item
任何模型都會自動查找作為模型名稱復數形式的表(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';
}
現在更新您的查詢以使用模型而不是 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();
當使用模型返回集合與 DB::select 時,您需要添加 get() 作為最終方法。
這是這個問題的解決方案,希望它可以在未來幫助其他人。
$items = DB::table('items')->orderBy('created_at', 'desc')
->join('items_categories', 'items.item_category_id', '=', 'items_categories.category_id')
->select(DB::raw('"car" AS type,
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);
我像這個示例一樣實現它
$first = Message::where('from_id', '=', Auth::user()->id)
->where('to_id', '=', $id)->get();
foreach ($first as $f)
$f->is_sent = true;
$second = Message::where('from_id', '=', $id)
->where('to_id', '=', Auth::user()->id)->get();
foreach ($second as $s)
$s->is_sent = false;
$chats = $first->merge($second)
->sortBy('created_at');
return $chats->toJson();
你可以通過 for eachafter get() 方法來完成
我遇到了同樣的要求,我知道現在已經晚了,但它可能會在將來對某人有所幫助:
這是我的代碼如何在 Laravel eloquent 模型中添加自定義字段
$searchResults = Blog::with('categories')
->where('title', 'like', "%{$keyword}%")
->orWhere('description', 'like', "%{$keyword}%")
->select(['*', DB::raw("'{$keyword}' as keyword")])
->get();
謝謝
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.