2017-10-20 141 views
1

使用Lumen 5.5.2和illuminate/database v5.5.17。雄辯的關係返回null,但類似的關係很好

我有3個模型設置,其中一個屬於另一個2.所以報價,有一個區域和一個倉庫。

與倉庫的關係按預期工作,該區域返回null。

例如

$quoteModel = new Quote();   
    $quote = $quoteModel 
      ->with('area') 
      ->with('depot') 
      ->where('id', '=', $id) 
      ->first(); 


    echo 'depot id : ' , $quote->depot->id , "<br>\n"; 
    echo 'area id : ' , $quote->area->id , "<br>\n"; 

貯庫ID會被迴盪,因爲它不是一個對象的區域將導致錯誤。

將模型名稱作爲數組​​傳遞,或者只是請求區域(兩種方法)都不能解決此問題。

Quote.php

namespace App\Models; 

use Illuminate\Database\Eloquent\Model as EloquentModel; 

class Quote extends EloquentModel { 

    protected $table = 'quotes'; 

    public function area() { 
     return $this->belongsTo('\App\Models\Area', 'area_id', 'id'); 
    } 

    public function depot() { 
     return $this->belongsTo('\App\Models\Depot', 'depot_id', 'id'); 
    } 

} 

Area.php

namespace App\Models; 

use Illuminate\Database\Eloquent\Model as EloquentModel; 

class Area extends EloquentModel { 

    protected $table = 'areas'; 

    public $timestamps = false; 
    public $incrementing = false; 

    public function quotes() { 
     return $this->hasMany('\App\Models\Quote', 'area_id', 'id'); 
    } 

} 

Depot.php

namespace App\Models; 

use Illuminate\Database\Eloquent\Model as EloquentModel; 

class Depot extends EloquentModel { 

    protected $table = 'depots'; 

    public $timestamps = false; 
    public $incrementing = false; 

    public function quotes() { 
     return $this->hasMany('\App\Models\Quote', 'depot_id', 'id'); 
    } 

} 

如果我在Area.php創建一個解析錯誤,腳本將失敗,證明它正在被包括在內。

我有一個監聽器,所以我可以記錄查詢,他們顯示出來很好。

select * from `quotes` where `id` = 99192 limit 1 
select * from `areas` where `areas`.`id` in (072) 
select * from `depots` where `depots`.`id` in (07) 

如果我手動運行區域查詢,它將返回我期望的行。

我試着改變區域關係的名稱,但它沒有幫助。

+1

你使用了什麼雄辯的版本?你可以試試 - > with(['area','depot'])而不是鏈接它們嗎? – matiit

+0

感謝您對版本的提醒。它們是寫作時最新的(我在5.4版本,升級沒有幫助或傷害) - 我更新了我的問題。可悲的陣列語法沒有幫助 – CodeMonkey

回答

1

因此,這個難題的缺點是,該項目是針對遺留數據庫建立的,作爲更新現有Web應用程序的一部分。

原來,有一些數據類型不一致;當我能夠成功地將另一個模型鏈接到沒有問題的區域時,我發現了這一點。 area_id的字段通常是零填充int,但由於某種原因,在引號表中它是一個char;所以當在adminer中瀏覽時數據看起來是正確的,並且在複製和粘貼時工作,但在Eloquents內部的某處不匹配。

更改表格上的數據類型可以解決問題。

+0

很高興看到你明白了! – matiit