亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何在 Laravel 7 中查詢列類型并檢索布爾值?

如何在 Laravel 7 中查詢列類型并檢索布爾值?

PHP
白板的微信 2023-06-30 16:22:52
有沒有辦法能夠判斷給定數據庫表中的某個列是“布爾”類型,如果是,則將“0”或“1”轉換為“否”和“是”?我有一個名為“gearitems”的表,其中包含有關遠足裝備項目的基本一般信息(如價格、重量、描述等),然后我還有近 60 個其他“一對一”關系表(例如:“背包”、“睡袋”、 “帳篷”)根據裝備的類型都有特定的“特殊功能”。例如,如果是背包,則容量以升為單位,但如果是帳篷,則需要的木樁數量等。我遇到的問題是,許多這些小的“特殊功能”表都有不同名稱的布爾類型列(例如“背包”中的“防水”或“睡袋”中的“可附加”),當我想向用戶顯示對于特定的齒輪件,我有一個函數可以將一般的“gearitems”表連接到相應的特定齒輪類型表。對于所有列類型,顯示數據插入數據庫時都沒有問題,但布爾值返回“1”或“0”...我不能將所有“1”和“0”轉換為“是” " 或 "no",因為其他值可能是 1 或 0,它們不是布爾值。所以我想,如果我可以檢查列類型是否是布爾類型數據,我就可以安全地將值轉換為是或否,但是如果不專門針對列的名稱,我該如何做到這一點呢?(因為所有布爾類型列的列表會太長并且將來難以編輯)我創建了一個名為“specialfeatures”的表,其中包含每個裝備類型(“背包”、sllepingbags”等)的每個表中的所有特殊功能名稱(如“防水”、“stakes_required”、“capacity_l”等)的列表)。我考慮過在special_features_name列旁邊添加一個名為“boolean”的列來指示該功能是否為布爾值,但這似乎是一種非常粗糙且不優雅的方法。當然有更好的方法嗎?如果有幫助,這是我的代碼中的相關部分:我的控制器:public function show(Manufacturer $manufacturer, GearItem $gearItem, GearCategory $gearCategory)    {         // Get the item's special features Model's name:        $featureModel = SpecialFeature::where('sub_categories_id', $gearItem->sub_categories_id)->value('model_name');        $specialFeatures =  'App\\'.$featureModel;        // Get the manufacturer's name and homepage:         $manufacturer->name = $manufacturer::where('id', $gearItem->manufacturer_id)->value('name');        $manufacturer->homepage = $manufacturer::where('id', $gearItem->manufacturer_id)->value('homepage');        // Get all the item's special features:         $gearItem->features = $specialFeatures::where('gear_items_id', $gearItem->id)->get();                // Iterator for the spacial features names:        $featureNames = SpecialFeature::where('sub_categories_id', $gearItem->sub_categories_id)->pluck('feature_name');        $featureNames->title = SpecialFeature::where('sub_categories_id', $gearItem->sub_categories_id)->pluck('feat_html');                return view('gearitem.show', compact(['gearCategory', 'manufacturer', 'gearItem', 'featureNames']));    }
查看完整描述

1 回答

?
冉冉說

TA貢獻1877條經驗 獲得超1個贊

所以我找到了解決這個問題的方法:


在需要查詢布爾值的模型中,將布爾特征的名稱添加為鍵,將“boolean”添加為值,如下所示:


 protected $casts = [

        'waterproof' => 'boolean'

    ];

然后,在控制器中:


// Get all the item's special features and "clean" them: 

        $specialFeaturesValues = $specialFeatures::where('gear_items_id', $gearItem->id)->get();

        $specialFeaturesRejects = ['id' => 'xy', 'gear_items_id' => 'xy', 'created_at' => 'xy', 'updated_at' => 'xy'];

        $specialFeaturesClean = array_diff_key($specialFeaturesValues[0]->getAttributes(), $specialFeaturesRejects);


  $booleanFeatures = array_keys($specialFeaturesValues[0]->getCasts(), 'boolean');


        foreach($booleanFeatures as $booleanFeature){

            if ($specialFeaturesClean[$booleanFeature] > 0){

                $specialFeaturesClean[$booleanFeature] = 'Yes';

            } elseif($specialFeaturesClean[$booleanFeature] === 0){

                $specialFeaturesClean[$booleanFeature] = 'No';

            } else {

                $specialFeaturesClean[$booleanFeature] = 'Unknown';

            };


        }

(不要忘記使用“發送”$specialFeaturesClean到視圖compact())


在刀片視圖中,這個簡單的foreach循環將顯示“干凈”值,將“1”(或任何其他真實值)替換為“是”,將“0”替換為“否”,將“空”替換為“未知”。(例如見圖片)

http://img1.sycdn.imooc.com//649e91030001f40906490212.jpg

查看完整回答
反對 回復 2023-06-30
  • 1 回答
  • 0 關注
  • 179 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號