ugrás a tartalomhoz

Laravel 5.0 - left join összekötés eloquent módra

DarkRaptor · 2015. Júl. 4. (Szo), 14.07
Sziasztok!

most ismerkedem a laravel model részével és egy összetettebb lekérdezésben kérném a segítségeteket. Lényegében ezt szeretném megvalósítani eloquent összekötéssel:
  1. SELECT  
  2. news_contents.news_id,  
  3. news_contents.title,  
  4. news_contents.seo_url,  
  5. site_pages.page_url  
  6. FROM  
  7. news  
  8. LEFT JOIN  
  9. news_contents  
  10. ON  
  11. news.news_id = news_contents.news_id  
  12. LEFT JOIN  
  13. site_pages  
  14. ON  
  15. site_pages.language_id = news_contents.language_id  
  16. WHERE  
  17. news_contents.language_id = :language_id &&  
  18. site_pages.page_id = :page_id  
  19. ORDER BY  
  20. news.create_date  
a model rétegek pedig (app/Models):
  1. class News extends Model  
  2. {  
  3. /** 
  4. * The table associated with the model. 
  5. * 
  6. * @var string 
  7. */  
  8. protected $table = 'news';  
  9.   
  10.   
  11. /** 
  12. * Primary key. 
  13. * 
  14. * @var int 
  15. */  
  16.   
  17. protected $primaryKey = 'news_id';  
  18.   
  19.   
  20. public function NewsContents()  
  21. {  
  22. return $this->belongsTo('App\Model\NewsContents');  
  23. }  
  24. }  
  25.   
  26. class NewsContents extends Model  
  27. {  
  28. /** 
  29. * The table associated with the model. 
  30. * 
  31. * @var string 
  32. */  
  33. protected $table = 'news_contents';  
  34.   
  35.   
  36. /** 
  37. * Primary key. 
  38. * 
  39. * @var int 
  40. */  
  41.   
  42. protected $primaryKey = 'nl_id';  
  43.   
  44.   
  45. public function news()  
  46. {  
  47. return $this->hasMany('App\Model\News''news_id');  
  48. }  
  49.   
  50. public function pages()  
  51. {  
  52. return $this->hasMany('App\Model\Page''language_id');  
  53. }  
  54. }  
  55.   
  56. class Page extends Model  
  57. {  
  58. /** 
  59. * The table associated with the model. 
  60. * 
  61. * @var string 
  62. */  
  63. protected $table = 'site_pages';  
  64.   
  65.   
  66. /** 
  67. * Primary key. 
  68. * 
  69. * @var int 
  70. */  
  71.   
  72. protected $primaryKey = 'page_id';  
  73.   
  74.   
  75. public function NewsContents()  
  76. {  
  77. return $this->belongsTo('App\Model\NewsContents');  
  78. }  
  79. }  
Eddig már sikerült eljutnom:
  1. $news_list = \App\Models\News::  
  2.             select(array('news_contents.news_id''news_contents.title''news_contents.seo_url''site_pages.page_url'))  
  3.             ->leftjoin('news_contents','news.news_id','=','news_contents.news_id')  
  4.             ->leftjoin('site_pages','site_pages.language_id','=','news_contents.language_id')  
  5.             ->where('site_pages.page_id',$current_page_datas->page_id)  
  6.             ->where('news_contents.language_id',$language_id)  
  7.             ->orderBy('news.create_date''asc')  
  8.             ->get();  
de ez még mindig csak egy left join-os összekötés. Hogyan lehetne ezt úgy módosítani, hogy a modellekben létrehozott összekötéseket (hasMany/belongsTo) használja?

Köszönöm!
 
1

közben alakítottam a modelleken...

DarkRaptor · 2015. Júl. 5. (V), 14.06
News:
  1. class News extends Model  
  2. {  
  3.     /** 
  4.      * The table associated with the model. 
  5.      * 
  6.      * @var string 
  7.      */  
  8.     protected $table = 'news';  
  9.       
  10.       
  11.     /** 
  12.      * Primary key. 
  13.      * 
  14.      * @var int 
  15.      */  
  16.        
  17.     protected $primaryKey = 'news_id';  
  18.       
  19.       
  20.     public function NewsContents()  
  21.     {  
  22.         return $this->hasMany('App\Models\NewsContents''news_id');  
  23.     }  
  24. }  
NewsContents:
  1. class NewsContents extends Model  
  2. {  
  3.     /** 
  4.      * The table associated with the model. 
  5.      * 
  6.      * @var string 
  7.      */  
  8.     protected $table = 'news_contents';  
  9.       
  10.       
  11.     /** 
  12.      * Primary key. 
  13.      * 
  14.      * @var int 
  15.      */  
  16.        
  17.     protected $primaryKey = 'nl_id';  
  18.       
  19.       
  20.     public function news()  
  21.     {  
  22.         return $this->belongsTo('App\Models\News''news_id');  
  23.     }  
  24.       
  25.     public function pages()  
  26.     {  
  27.         return $this->hasMany('App\Models\Page''language_id');  
  28.     }  
  29. }  
Page:
  1. class Page extends Model  
  2. {  
  3.     /** 
  4.      * The table associated with the model. 
  5.      * 
  6.      * @var string 
  7.      */  
  8.     protected $table = 'site_pages';  
  9.       
  10.       
  11.     /** 
  12.      * Primary key. 
  13.      * 
  14.      * @var int 
  15.      */  
  16.        
  17.     protected $primaryKey = 'page_id';  
  18.       
  19.   
  20.       
  21.     public function NewsContents()  
  22.     {  
  23.         return $this->belongsTo('App\Models\NewsContents''language_id');  
  24.     }  
  25. }  
és ezzel az összekötéssel próbálkoztam:
  1. $oNews = new \App\Models\News();  
  2.          
  3.        $news_list = $oNews  
  4.             ->with("NewsContents")  
  5.                ->where('language_id'$language_id)  
  6.            ->with("pages")  
  7.                ->where('page_id'$current_page_datas->page_id)  
  8.            ->orderBy('create_date''asc')  
  9.            ->get();  
de ezt a hibaüzenetet dobja:

Column not found: 1054 Unknown column 'language_id' in 'where clause' (SQL: select * from `news` where `language_id` = 1 and `page_id` = 3 order by `create_date` asc)


ergo a "with" mint ha ott se lenne... nincs több ötletem :( tudtok esetleg valamit javasolni? mit rontok el?

köszönöm!