为了账号安全,请及时绑定邮箱和手机立即绑定

如何在 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”替换为“否”,将“空”替换为“未知”。(例如见图片)

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

查看完整回答
反对 回复 2023-06-30
  • 1 回答
  • 0 关注
  • 133 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信