pbootcms网站模板|日韩1区2区|织梦模板||网站源码|日韩1区2区|jquery建站特效-html5模板网

<i id='hvhCf'><tr id='hvhCf'><dt id='hvhCf'><q id='hvhCf'><span id='hvhCf'><b id='hvhCf'><form id='hvhCf'><ins id='hvhCf'></ins><ul id='hvhCf'></ul><sub id='hvhCf'></sub></form><legend id='hvhCf'></legend><bdo id='hvhCf'><pre id='hvhCf'><center id='hvhCf'></center></pre></bdo></b><th id='hvhCf'></th></span></q></dt></tr></i><div class="mey6msg" id='hvhCf'><tfoot id='hvhCf'></tfoot><dl id='hvhCf'><fieldset id='hvhCf'></fieldset></dl></div>

<legend id='hvhCf'><style id='hvhCf'><dir id='hvhCf'><q id='hvhCf'></q></dir></style></legend>

    1. <small id='hvhCf'></small><noframes id='hvhCf'>

      • <bdo id='hvhCf'></bdo><ul id='hvhCf'></ul>
      <tfoot id='hvhCf'></tfoot>

      如何自定義 Laravel 的 DatabaseQueryBuilder(制作更好的

      How to customize Laravel#39;s DatabaseQueryBuilder (make better subquery)(如何自定義 Laravel 的 DatabaseQueryBuilder(制作更好的子查詢))
      • <tfoot id='HG4Li'></tfoot>

          <tbody id='HG4Li'></tbody>

        <small id='HG4Li'></small><noframes id='HG4Li'>

          <bdo id='HG4Li'></bdo><ul id='HG4Li'></ul>
            <legend id='HG4Li'><style id='HG4Li'><dir id='HG4Li'><q id='HG4Li'></q></dir></style></legend>

              1. <i id='HG4Li'><tr id='HG4Li'><dt id='HG4Li'><q id='HG4Li'><span id='HG4Li'><b id='HG4Li'><form id='HG4Li'><ins id='HG4Li'></ins><ul id='HG4Li'></ul><sub id='HG4Li'></sub></form><legend id='HG4Li'></legend><bdo id='HG4Li'><pre id='HG4Li'><center id='HG4Li'></center></pre></bdo></b><th id='HG4Li'></th></span></q></dt></tr></i><div class="0oqaomg" id='HG4Li'><tfoot id='HG4Li'></tfoot><dl id='HG4Li'><fieldset id='HG4Li'></fieldset></dl></div>
              2. 本文介紹了如何自定義 Laravel 的 DatabaseQueryBuilder(制作更好的子查詢)的處理方法,對大家解決問題具有一定的參考價值,需要的朋友們下面隨著小編來一起學習吧!

                問題描述

                我正在開發 Laravel 4.據我所知,我可以做子查詢:

                I'm working on Laravel 4. As I knew, I can do subquery:

                Project::whereIn('project_id', function($q) {
                    $q->select('project_id')
                        ->from('company')
                        ->whereNull('deleted_at');
                });
                

                我發現了一些復雜情況,即我無法在子查詢中使用作用域并禁用 soft_delete 使我對源代碼進行了大量更改.

                I found complications, that I can't use scope in subquery and disable soft_delete make me change source code so much.

                我希望它是:

                Project::whereIn('project_id', function(&$q) {
                    $q = Company::select('project_id')->getQuery();
                });
                

                現在,我可以添加范圍,輕松禁用 soft_delete.

                Now, I can add scope, disable soft_delete easily.

                我嘗試并找到了一個解決方案,即我必須更改 Laravel 的 DatabaseQueryBuilder 代碼,函數 whereInSub,第 786 行.

                I tried, and found a solution, that I must change Laravel's DatabaseQueryBuilder code, function whereInSub, line 786.

                call_user_func($callback, $query = $this->newQuery());
                

                到:

                $query = $this->newQuery();
                call_user_func_array($callback, array(&$query));
                

                修改 Laravel 框架的供應商是有害的.所以想問一下怎么安全的做.

                It's harmful to modify Laravel framework's vendor. So I want to ask how to do it safely.

                對不起,因為我的英語不好.

                Sorry because my bad English.

                感謝您的閱讀.

                推薦答案

                哦!這是一個相當棘手的問題,因為您的模型將擴展 Eloquent,然后 Eloquent 使用 IlluminateDatabaseQueryBuilder.

                Oooh! This is quite a tricky one since your model would extend Eloquent, then Eloquent uses IlluminateDatabaseQueryBuilder.

                但我注意到 Eloquent 實際上是 app/config/app.php 文件中的別名.因此,您可以執行以下步驟.

                But what I noticed is that Eloquent is actually an alias in app/config/app.php file. So what you can do is following these steps.

                1. 使用自定義的 whereInSub()IlluminateDatabaseQueryBuilder 擴展到 MyQueryBuilder.
                2. IlluminateDatabaseEloquentModel 擴展到 MyModel 并使其 use 你的 MyQueryBuilder.
                3. app/config/app.php 中的 Eloquent 別名設置為新的 MyModel 類.
                1. Extend IlluminateDatabaseQueryBuilder to MyQueryBuilder with your custom whereInSub().
                2. Extend IlluminateDatabaseEloquentModel to MyModel and make it use your MyQueryBuilder.
                3. Set Eloquent alias in app/config/app.php to your new MyModel class.

                像這樣:

                MyQueryBuilder.php:

                use Closure;
                use IlluminateSupportCollection;
                use IlluminateDatabaseConnectionInterface;
                use IlluminateDatabaseQueryGrammarsGrammar;
                use IlluminateDatabaseQueryProcessorsProcessor;
                
                class MyQueryBuilder extends IlluminateDatabaseQueryBuilder
                {
                    protected function whereInSub($column, Closure $callback, $boolean, $not)
                    {
                        $type = $not ? 'NotInSub' : 'InSub';
                
                        $query = $this->newQuery(); // Your changes
                        call_user_func_array($callback, array(&$query)); // Your changes
                
                        $this->wheres[] = compact('type', 'column', 'query', 'boolean');
                
                        $this->mergeBindings($query);
                
                        return $this;
                    }
                }
                

                MyModel.php:

                use DateTime;
                use ArrayAccess;
                use CarbonCarbon;
                use LogicException;
                use IlluminateEventsDispatcher;
                use IlluminateDatabaseEloquentRelationsPivot;
                use IlluminateDatabaseEloquentRelationsHasOne;
                use IlluminateDatabaseEloquentRelationsHasMany;
                use IlluminateDatabaseEloquentRelationsMorphTo;
                use IlluminateSupportContractsJsonableInterface;
                use IlluminateSupportContractsArrayableInterface;
                use IlluminateDatabaseEloquentRelationsRelation;
                use IlluminateDatabaseEloquentRelationsMorphOne;
                use IlluminateDatabaseEloquentRelationsMorphMany;
                use IlluminateDatabaseEloquentRelationsBelongsTo;
                // use IlluminateDatabaseQueryBuilder as QueryBuilder;
                use IlluminateDatabaseEloquentRelationsMorphToMany;
                use IlluminateDatabaseEloquentRelationsBelongsToMany;
                use IlluminateDatabaseEloquentRelationsHasManyThrough;
                use IlluminateDatabaseConnectionResolverInterface as Resolver;
                use MyQueryBuilder as QueryBuilder; // MyModel should now use your MyQueryBuilder instead of the default which I commented out above
                
                abstract class MyModel extends IlluminateDatabaseEloquentModel
                {
                
                }
                

                app/config/app.php:

                'aliases' => array(
                    ...
                    'Eloquent'        => 'MyModel',
                    ...
                );
                

                請注意,我將一長串 use 放在那里,因為 "use" 關鍵字不會被繼承.此外,為了簡單起見,我沒有將 MyQueryBuilderMyModel 放在命名空間中.根據我們使用的 Laravel 版本,我的 use 列表也可能與您的不同,因此請檢查用途.

                Note that I put long lists of use up there because "use" keyword does not get inherited. Also I did not put MyQueryBuilder and MyModel in a namespace for the sake of simplicity. My use list might also be different from yours depending on Laravel versions we use, so please check the uses too.

                這篇關于如何自定義 Laravel 的 DatabaseQueryBuilder(制作更好的子查詢)的文章就介紹到這了,希望我們推薦的答案對大家有所幫助,也希望大家多多支持html5模板網!

                【網站聲明】本站部分內容來源于互聯網,旨在幫助大家更快的解決問題,如果有圖片或者內容侵犯了您的權益,請聯系我們刪除處理,感謝您的支持!

                相關文檔推薦

                Deadlock exception code for PHP, MySQL PDOException?(PHP、MySQL PDOException 的死鎖異常代碼?)
                PHP PDO MySQL scrollable cursor doesn#39;t work(PHP PDO MySQL 可滾動游標不起作用)
                PHP PDO ODBC connection(PHP PDO ODBC 連接)
                Using PDO::FETCH_CLASS with Magic Methods(使用 PDO::FETCH_CLASS 和魔術方法)
                php pdo get only one value from mysql; value that equals to variable(php pdo 只從 mysql 獲取一個值;等于變量的值)
                MSSQL PDO could not find driver(MSSQL PDO 找不到驅動程序)
                    <tbody id='mtBDP'></tbody>

                    <legend id='mtBDP'><style id='mtBDP'><dir id='mtBDP'><q id='mtBDP'></q></dir></style></legend>

                    <small id='mtBDP'></small><noframes id='mtBDP'>

                  • <tfoot id='mtBDP'></tfoot>

                    <i id='mtBDP'><tr id='mtBDP'><dt id='mtBDP'><q id='mtBDP'><span id='mtBDP'><b id='mtBDP'><form id='mtBDP'><ins id='mtBDP'></ins><ul id='mtBDP'></ul><sub id='mtBDP'></sub></form><legend id='mtBDP'></legend><bdo id='mtBDP'><pre id='mtBDP'><center id='mtBDP'></center></pre></bdo></b><th id='mtBDP'></th></span></q></dt></tr></i><div class="ac2cyca" id='mtBDP'><tfoot id='mtBDP'></tfoot><dl id='mtBDP'><fieldset id='mtBDP'></fieldset></dl></div>
                    • <bdo id='mtBDP'></bdo><ul id='mtBDP'></ul>

                          主站蜘蛛池模板: 武汉天安盾电子设备有限公司 - 安盾安检,武汉安检门,武汉安检机,武汉金属探测器,武汉测温安检门,武汉X光行李安检机,武汉防爆罐,武汉车底安全检查,武汉液体探测仪,武汉安检防爆设备 | 求是网 - 思想建党 理论强党| 西门子代理商_西门子变频器总代理-翰粤百科 | 一礼通 (www.yilitong.com)-企业礼品解决方案一站式服务平台 | 北京征地律师,征地拆迁律师,专业拆迁律师,北京拆迁律师,征地纠纷律师,征地诉讼律师,征地拆迁补偿,拆迁律师 - 北京凯诺律师事务所 | 杭州代理记账费用-公司注销需要多久-公司变更监事_杭州福道财务管理咨询有限公司 | 铸钢件厂家-铸钢齿轮-减速机厂家-淄博凯振机械有限公司 | 环球电气之家-中国专业电气电子产品行业服务网站! | 苏州防水公司_厂房屋面外墙防水_地下室卫生间防水堵漏-苏州伊诺尔防水工程有限公司 | 成都热收缩包装机_袖口式膜包机_高速塑封机价格_全自动封切机器_大型套膜机厂家 | 专业深孔加工_东莞深孔钻加工_东莞深孔钻_东莞深孔加工_模具深孔钻加工厂-东莞市超耀实业有限公司 | 大型低温冷却液循环泵-低温水槽冷阱「厂家品牌」京华仪器_京华仪器 | 餐饮加盟网_特色餐饮加盟店_餐饮连锁店加盟 | 流程管理|流程管理软件|企业流程管理|微宏科技-AlphaFlow_流程管理系统软件服务商 | hc22_hc22价格_hc22哈氏合金—东锜特殊钢 | 超声波乳化机-超声波分散机|仪-超声波萃取仪-超声波均质机-精浩机械|首页 | 小区健身器材_户外健身器材_室外健身器材_公园健身路径-沧州浩然体育器材有限公司 | 上海小程序开发-小程序制作-上海小程序定制开发公司-微信商城小程序-上海咏熠 | 代写标书-专业代做标书-商业计划书代写「深圳卓越创兴公司」 | 引领中高档酒店加盟_含舍·美素酒店品牌官网 | 缝纫客| 对辊式破碎机-对辊制砂机-双辊-双齿辊破碎机-巩义市裕顺机械制造有限公司 | 菏泽商标注册_菏泽版权登记_商标申请代理_菏泽商标注册去哪里 | 中式装修设计_全屋定制家具_实木仿古门窗花格厂家-喜迎门 | Jaeaiot捷易科技-英伟达AI显卡模组/GPU整机服务器供应商 | Eiafans.com_环评爱好者 环评网|环评论坛|环评报告公示网|竣工环保验收公示网|环保验收报告公示网|环保自主验收公示|环评公示网|环保公示网|注册环评工程师|环境影响评价|环评师|规划环评|环评报告|环评考试网|环评论坛 - Powered by Discuz! | 直流电能表-充电桩电能表-导轨式电能表-智能电能表-浙江科为电气有限公司 | 反渗透水处理设备|工业零排放|水厂设备|软化水设备|海南净水设备--海南水处理设备厂家 | 杭州营业执照代办-公司变更价格-许可证办理流程_杭州福道财务管理咨询有限公司 | 锂电池生产厂家-电动自行车航模无人机锂电池定制-世豹新能源 | 气动|电动调节阀|球阀|蝶阀-自力式调节阀-上海渠工阀门管道工程有限公司 | 电缆接头_防水接头_电缆防水接头 - 乐清市新豪电气有限公司 | 餐饮加盟网_特色餐饮加盟店_餐饮连锁店加盟 | 代办建筑资质升级-建筑资质延期就找上海国信启航 | 不锈钢法兰-碳钢法兰-法兰盘生产加工厂家-[鼎捷峰]-不锈钢法兰-碳钢法兰-法兰盘生产加工厂家-[鼎捷峰] | 电动百叶窗,开窗器,电动遮阳百叶,电动开窗机生产厂家-徐州鑫友工控科技发展有限公司 | 水厂污泥地磅|污泥处理地磅厂家|地磅无人值守称重系统升级改造|地磅自动称重系统维修-河南成辉电子科技有限公司 | 磁力链接搜索神器_BT磁力狗_CILIMAO磁力猫_高效磁力搜索引擎2024 | 全自动实验室洗瓶机,移液管|培养皿|进样瓶清洗机,清洗剂-广州摩特伟希尔机械设备有限责任公司 | 高温高压釜(氢化反应釜)百科| 青岛侦探调查_青岛侦探事务所_青岛调查事务所_青岛婚外情取证-青岛狄仁杰国际侦探公司 |