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

  1. <legend id='gsWNg'><style id='gsWNg'><dir id='gsWNg'><q id='gsWNg'></q></dir></style></legend>

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

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

      <tfoot id='gsWNg'></tfoot>

      如何在 Laravel 中設置 Eloquent 關系屬于通過另一個

      How to set Eloquent relationship belongsTo THROUGH another model in Laravel?(如何在 Laravel 中設置 Eloquent 關系屬于通過另一個模型?)
      <tfoot id='ub6oy'></tfoot>
      • <small id='ub6oy'></small><noframes id='ub6oy'>

          <tbody id='ub6oy'></tbody>
        <legend id='ub6oy'><style id='ub6oy'><dir id='ub6oy'><q id='ub6oy'></q></dir></style></legend>

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

              • 本文介紹了如何在 Laravel 中設置 Eloquent 關系屬于通過另一個模型?的處理方法,對大家解決問題具有一定的參考價值,需要的朋友們下面隨著小編來一起學習吧!

                問題描述

                我有一個模型列表,它通過它的belongsTo('Model') 關系繼承應該本質上屬于其對應模型所屬的制造商.

                I have a model Listing that inherits through its belongsTo('Model') relationship should inherently belong to the Manufacturer that its corresponding Model belongs to.

                這是我的列表模型:

                    public function model()
                    {
                        return $this->belongsTo('Model', 'model_id');
                    }
                
                    public function manufacturer()
                    {
                        return $this->belongsTo('Manufacturer', 'models.manufacturer_id');
                        /*
                        $manufacturer_id = $this->model->manufacturer_id;
                        return Manufacturer::find($manufacturer_id)->name;*/
                    }
                

                和我的制造商模型:

                public function listings()
                {
                    return $this->hasManyThrough('Listing', 'Model', 'manufacturer_id', 'model_id');
                }
                
                public function models()
                {
                    return $this->hasMany('Model', 'manufacturer_id');
                }
                

                我可以在視圖中回顯 $listing->model->name,但不能回顯 $listing->manufacturer->name.這會引發錯誤.我嘗試在 Listing 模型中注釋掉 2 行只是為了獲得效果,然后我可以 echo $listing->manufacturer() 并且這會起作用,但這并不能正確建立它們的關系.我該怎么做呢?謝謝.

                I am able to echo $listing->model->name in a view, but not $listing->manufacturer->name. That throws an error. I tried the commented out 2 lines in the Listing model just to get the effect so then I could echo $listing->manufacturer() and that would work, but that doesn't properly establish their relationship. How do I do this? Thanks.

                修訂列表模型(感謝回答者):

                Revised Listing model (thanks to answerer):

                    public function model()
                    {
                        return $this->belongsTo('Model', 'model_id');
                    }
                
                    public function manufacturer()
                    {
                        return $this->belongsTo('Model', 'model_id')
                            ->join('manufacturers', 'manufacturers.id', '=', 'models.manufacturer_id');
                    }
                

                推薦答案

                我找到了一個解決方案,但不是很簡單.我已經在下面發布了它,但我首先發布了我認為更好的解決方案.

                I found a solution, but it's not extremely straight forward. I've posted it below, but I posted what I think is the better solution first.

                您不應該直接從列表中訪問制造商,因為制造商僅適用于模型.雖然您可以從列表對象中預先加載制造商關系,但請參見下文.

                You shouldn't be able to access manufacturer directly from the listing, since manufacturer applies to the Model only. Though you can eager-load the manufacturer relationships from the listing object, see below.

                class Listing extends Eloquent
                {
                    public function model()
                    {
                        return $this->belongsTo('Model', 'model_id');
                    }
                }
                
                class Model extends Eloquent
                {
                    public function manufacturer()
                    {
                        return $this->belongsTo('manufacturer');
                    }
                }
                
                class Manufacturer extends Eloquent
                {
                } 
                
                $listings = Listing::with('model.manufacturer')->all();
                foreach($listings as $listing) {
                    echo $listing->model->name . ' by ' . $listing->model->manufacturer->name;
                }
                

                為了讓您要求的解決方案發揮作用,我們費了一番周折.解決方案如下:

                It took a bit of finagling, to get your requested solution working. The solution looks like this:

                public function manufacturer()
                {
                    $instance = new Manufacturer();
                    $instance->setTable('models');
                    $query = $instance->newQuery();
                
                    return (new BelongsTo($query, $this, 'model_id', $instance->getKeyName(), 'manufacturer'))
                        ->join('manufacturers', 'manufacturers.id', '=', 'models.manufacturer_id')
                        ->select(DB::raw('manufacturers.*'));
                }
                

                我首先處理查詢并從中構建響應.我希望創建的查詢類似于:

                I started off by working with the query and building the response from that. The query I was looking to create was something along the lines of:

                SELECT * FROM manufacturers ma
                    JOIN models m on m.manufacturer_id = ma.id
                WHERE m.id in (?)
                

                通常通過執行 return $this->belongsTo('Manufacturer');

                select * from `manufacturers` where `manufacturers`.`id` in (?)
                

                ? 將替換為列表表中 manufacturer_id 列的值.此列不存在,因此將插入單個 0,并且您永遠不會返回制造商.

                The ? would be replaced by the value of manufacturer_id columns from the listings table. This column doesn't exist, so a single 0 would be inserted and you'd never return a manufacturer.

                在我想重新創建的查詢中,我受到了models.id 的約束.通過定義外鍵,我可以在我的關系中輕松訪問該值.于是關系變成了

                In the query I wanted to recreate I was constraining by models.id. I could easily access that value in my relationship by defining the foreign key. So the relationship became

                return $this->belongsTo('Manufacturer', 'model_id');
                

                這會產生與之前相同的查詢,但會使用 model_ids 填充 ?.所以這會返回結果,但通常是不正確的結果.然后我打算更改我從中選擇的基表.這個值是從模型派生出來的,所以我把傳入的模型改成了Model.

                This produces the same query as it did before, but populates the ? with the model_ids. So this returns results, but generally incorrect results. Then I aimed to change the base table that I was selecting from. This value is derived from the model, so I changed the passed in model to Model.

                return $this->belongsTo('Model', 'model_id');
                

                我們現在已經模擬了模型關系,太好了,我真的什么都沒有.但至少現在,我可以連接到制造商表.所以我再次更新了關系:

                We've now mimic the model relationship, so that's great I hadn't really got anywhere. But at least now, I could make the join to the manufacturers table. So again I updated the relationship:

                return $this->belongsTo('Model', 'model_id')
                    ->join('manufacturers', 'manufacturers.id', '=', 'models.manufacturer_id');
                

                這讓我們更近了一步,生成了以下查詢:

                This got us one step closer, generating the following query:

                select * from `models` 
                    inner join `manufacturers` on `manufacturers`.`id` = `models`.`manufacturer_id`
                    where `models`.`id` in (?)
                

                從這里開始,我想將查詢的列限制為制造商列,為此我添加了選擇規范.這使關系變為:

                From here, I wanted to limit the columns I was querying for to just the manufacturer columns, to do this I added the select specification. This brought the relationship to:

                返回 $this->belongsTo('Model', 'model_id')->加入('制造商','manufacturers.id','=','models.manufacturer_id')->select(DB::raw('manufacturers.*'));

                return $this->belongsTo('Model', 'model_id') ->join('manufacturers', 'manufacturers.id', '=', 'models.manufacturer_id') ->select(DB::raw('manufacturers.*'));

                并得到查詢

                select manufacturers.* from `models` 
                    inner join `manufacturers` on `manufacturers`.`id` = `models`.`manufacturer_id`
                    where `models`.`id` in (?)
                

                現在我們有一個 100% 有效的查詢,但是從關系返回的對象屬于 Model 類型而不是 Manufacturer.這就是最后一點詭計出現的地方.我需要返回一個 Manufacturer,但希望它受到 where 子句中的models表的約束.我創建了一個新的制造商實例并將表設置為models`并手動創建關系.

                Now we have a 100% valid query, but the objects being returned from the relationship are of type Model not Manufacturer. And that's where the last bit of trickery came in. I needed to return a Manufacturer, but wanted it to constrain by themodelstable in the where clause. I created a new instance of Manufacturer and set the table tomodels` and manually create the relationship.

                需要注意的是,保存將不起作用.

                $listing = Listing::find(1);
                $listing->manufacturer()->associate(Manufacturer::create([]));
                $listing->save();
                

                這將創建一個新的制造商,然后將 listings.model_id 更新為新制造商的 ID.

                This will create a new Manufacturer and then update listings.model_id to the new manufacturer's id.

                這篇關于如何在 Laravel 中設置 Eloquent 關系屬于通過另一個模型?的文章就介紹到這了,希望我們推薦的答案對大家有所幫助,也希望大家多多支持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 找不到驅動程序)
                • <bdo id='Hp0fO'></bdo><ul id='Hp0fO'></ul>
                    <i id='Hp0fO'><tr id='Hp0fO'><dt id='Hp0fO'><q id='Hp0fO'><span id='Hp0fO'><b id='Hp0fO'><form id='Hp0fO'><ins id='Hp0fO'></ins><ul id='Hp0fO'></ul><sub id='Hp0fO'></sub></form><legend id='Hp0fO'></legend><bdo id='Hp0fO'><pre id='Hp0fO'><center id='Hp0fO'></center></pre></bdo></b><th id='Hp0fO'></th></span></q></dt></tr></i><div class="8vafdwt" id='Hp0fO'><tfoot id='Hp0fO'></tfoot><dl id='Hp0fO'><fieldset id='Hp0fO'></fieldset></dl></div>
                    <legend id='Hp0fO'><style id='Hp0fO'><dir id='Hp0fO'><q id='Hp0fO'></q></dir></style></legend>

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

                          <tbody id='Hp0fO'></tbody>

                      1. <tfoot id='Hp0fO'></tfoot>
                          主站蜘蛛池模板: 全自动真空上料机_粉末真空上料机_气动真空上料机-南京奥威环保科技设备有限公司 | atcc网站,sigma试剂价格,肿瘤细胞现货,人结肠癌细胞株购买-南京科佰生物 | 焊接减速机箱体,减速机箱体加工-淄博博山泽坤机械厂 | 美国查特CHART MVE液氮罐_查特杜瓦瓶_制造全球品质液氮罐 | 咖啡加盟-咖啡店加盟-咖啡西餐厅加盟-塞纳左岸咖啡西餐厅官网 | 【ph计】|在线ph计|工业ph计|ph计厂家|ph计价格|酸度计生产厂家_武汉吉尔德科技有限公司 | 代理记账_免费注册公司_营业执照代办_资质代办-【乐财汇】 | 高低温万能试验机_拉力试验机_拉伸试验机-馥勒仪器科技(上海)有限公司 | 杭州厂房降温,车间降温设备,车间通风降温,厂房降温方案,杭州嘉友实业爽风品牌 | 大功率金属激光焊接机价格_不锈钢汽车配件|光纤自动激光焊接机设备-东莞市正信激光科技有限公司 定制奶茶纸杯_定制豆浆杯_广东纸杯厂_[绿保佳]一家专业生产纸杯碗的厂家 | 骨龄仪_骨龄检测仪_儿童骨龄测试仪_品牌生产厂家【品源医疗】 | 免费分销系统 — 分销商城系统_分销小程序开发 -【微商来】 | 神超官网_焊接圆锯片_高速钢锯片_硬质合金锯片_浙江神超锯业制造有限公司 | 自动检重秤-动态称重机-重量分选秤-苏州金钻称重设备系统开发有限公司 | 低粘度纤维素|混凝土灌浆料|有机硅憎水粉|聚羧酸减水剂-南京斯泰宝 | 杭州中央空调维修_冷却塔/新风机柜/热水器/锅炉除垢清洗_除垢剂_风机盘管_冷凝器清洗-杭州亿诺能源有限公司 | WF2户外三防照明配电箱-BXD8050防爆防腐配电箱-浙江沃川防爆电气有限公司 | 济南拼接屏_山东液晶拼接屏_济南LED显示屏—维康国际官网 | 酒吧霸屏软件_酒吧霸屏系统,酒吧微上墙,夜场霸屏软件,酒吧点歌软件,酒吧互动游戏,酒吧大屏幕软件系统下载 | 北京网站建设-企业网站建设-建站公司-做网站-北京良言多米网络公司 | 钢化玻璃膜|手机钢化膜|钢化膜厂家|手机保护膜-【东莞市大象电子科技有限公司】 | HYDAC过滤器,HYDAC滤芯,现货ATOS油泵,ATOS比例阀-东莞市广联自动化科技有限公司 | 厚壁钢管-厚壁无缝钢管-小口径厚壁钢管-大口径厚壁钢管 - 聊城宽达钢管有限公司 | 偏心半球阀-电动偏心半球阀-调流调压阀-旋球阀-上欧阀门有限公司 | 电解抛光加工_不锈钢电解抛光_常州安谱金属制品有限公司 | 布袋式除尘器|木工除尘器|螺旋输送机|斗式提升机|刮板输送机|除尘器配件-泊头市德佳环保设备 | 超声波电磁流量计-液位计-孔板流量计-料位计-江苏信仪自动化仪表有限公司 | 气力输送_输送机械_自动化配料系统_负压吸送_制造主力军江苏高达智能装备有限公司! | 厂房出租-厂房规划-食品技术-厂房设计-厂房装修-建筑施工-设备供应-设备求购-龙爪豆食品行业平台 | LINK FASHION 童装·青少年装展 河南卓美创业科技有限公司-河南卓美防雷公司-防雷接地-防雷工程-重庆避雷针-避雷器-防雷检测-避雷带-避雷针-避雷塔、机房防雷、古建筑防雷等-山西防雷公司 | 建大仁科-温湿度变送器|温湿度传感器|温湿度记录仪_厂家_价格-山东仁科 | 安全阀_弹簧式安全阀_美标安全阀_工业冷冻安全阀厂家-中国·阿司米阀门有限公司 | 软装设计-提供软装装饰和软装配饰及软装陈设的软装设计公司 | 酶联免疫分析仪-多管旋涡混合仪|混合器-莱普特科学仪器(北京)有限公司 | 聚氨酯催化剂K15,延迟催化剂SA-1,叔胺延迟催化剂,DBU,二甲基哌嗪,催化剂TMR-2,-聚氨酯催化剂生产厂家 | SEO网站优化,关键词排名优化,苏州网站推广-江苏森歌网络 | 汝成内控-行政事业单位内部控制管理服务商| PVC快速门-硬质快速门-洁净室快速门品牌厂家-苏州西朗门业 | 质检报告_CE认证_FCC认证_SRRC认证_PSE认证_第三方检测机构-深圳市环测威检测技术有限公司 | 全自动包衣机-无菌分装隔离器-浙江迦南科技股份有限公司 | 滚筒烘干机_转筒烘干机_滚筒干燥机_转筒干燥机_回转烘干机_回转干燥机-设备生产厂家 |