2015-09-18 37 views
1

概述:雄辯左加入,出現了意外的結果

我有兩個表名爲event_metaoptions

選項:

enter image description here

事件元:

enter image description here

我有一個名爲事件元表,其中存儲特定事件的子信息。現在我想要發生的是連接event_metaoptions表使用leftjoin雄辯。

這是我的代碼。

public function getMetaValue($key) { 

    $event_meta = $this->hasOne('Core\Event\EventMeta', 'event_id') 
     ->leftjoin('options', 'options.id', '=', 'event_meta.meta_value') 
     ->where('meta_key', '=', $key) 
     ->first(); 

    // If Option[table] value is empty, it will retrieve for Event Meta's[table] value, else It will return false. 
    return (empty($event_meta->value)) ? (empty($event_meta->meta_value)) ? false : $event_meta->meta_value : $event_meta->value; 
} 

現在的問題是..如果我檢索meta_key標誌...

enter image description here

它檢索從選項表中的值稱爲Top Up擁有的6

的ID enter image description here

注意中的第一個字符徽標的meta_value它在選項ID中具有相同的值。

enter image description here

我試圖改變67,該值的變化,它檢索選項的Vending POS

任何解決方案?這不應該發生。由於徽標的價值比選項的實際ID更長。

---編輯---

我試圖在等待幫助時修復它。

1日嘗試:

我嘗試這個解決方案貪圖它可能是固定的。仍然不起作用。

public function getMetaValue($key) { 

    $event_meta = $this->hasOne('Core\Event\EventMeta', 'event_id') 
     ->leftjoin('options', function($query) { 
      $query->on('options.id', '=', 'event_meta.meta_value'); 
     })->where('meta_key', '=', $key) 
     ->first(); 
    return (empty($event_meta->value)) ? (empty($event_meta->meta_value)) ? false : $event_meta->meta_value : $event_meta->value; 
} 

回答

0

我有一個回答這個問題!這不是因爲它是雄辯的,但它確實在MYSQL查詢上有問題。技術上來說,我不會將它轉換爲相同類型。

感謝這傢伙的幫助誰在這裏回答我的相關問題。

https://stackoverflow.com/a/32647701/1699388

您的數字options.id場強制轉換爲同一類型在JOIN event_meta.meta_value。

所以我所做的是我將我options.id文本具有相同類型event_meta.meta_value在我的左連接查詢。

所以我鑄造像這樣

$leftjoin->on(DB::raw('CAST(options.id AS CHAR(1000))'), '=', 'event_meta.meta_value'); 

的演員參考(SO回答):https://stackoverflow.com/a/12127022/1699388

那麼它是什麼樣子就是這個!

public function getMetaValue($key) { 

    $event_meta = $this->hasOne('Core\Event\EventMeta', 'event_id') 
     ->leftjoin('options', function($leftjoin) { 
      $leftjoin->on(DB::raw('CAST(options.id AS CHAR(1000))'), '=', 'event_meta.meta_value'); 
     })->where('meta_key', '=', $key) 
     ->first(); 

    return (empty($event_meta->value)) ? (empty($event_meta->meta_value)) ? false : $event_meta->meta_value : $event_meta->value; 
} 

第二個解決方案來自我的老闆在工作(學分給他)。他所做的是他在左邊加入了另一個AND,將event_meta.meta_value轉換爲一個整數乘以1即可。

public function getMetaValue($key) { 

    $event_meta = $this->hasOne('Core\Event\EventMeta', 'event_id') 
     ->leftjoin('options', function($leftjoin) { 
      $leftjoin->on('options.id', '=', 'event_meta.meta_value'); 
      $leftjoin->on(DB::raw('CONCAT("", event_meta.meta_value * 1)'), '=', 'event_meta.meta_value');     
     })->where('meta_key', '=', $key) 
     ->first(); 

    return (empty($event_meta->value)) ? (empty($event_meta->meta_value)) ? false : $event_meta->meta_value : $event_meta->value; 
} 
0
Value insert of logo meta key value in worng table please correct Entry. 
Your logo value insert in options table and option id insert in Event Meta: table 

option table 
=========== 
id  type  value 
11  logo  6b3bca56b9c693db313b667ae77507291b47ddd55e382.. 




Event Meta: 
============ 
id  event_id  meta_key meta_value 
29  1    logo  11 


Now You retrive the Meta_key logo and use Your query so give perfect Result 
<?php 
public function getMetaValue($key) { 

    $event_meta = $this->hasOne('Core\Event\EventMeta', 'event_id') 
     ->leftjoin('options', function($query) { 
      $query->on('options.id', '=', 'event_meta.meta_value'); 
     })->where('meta_key', '=', $key) 
     ->first(); 
    return (empty($event_meta->value)) ? (empty($event_meta->meta_value)) ? false : $event_meta->meta_value : $event_meta->value; 
} 
?>