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:

SELECT
news_contents.news_id,
news_contents.title,
news_contents.seo_url,
site_pages.page_url
FROM
news
LEFT JOIN
news_contents
ON
news.news_id = news_contents.news_id
LEFT JOIN
site_pages
ON
site_pages.language_id = news_contents.language_id
WHERE
news_contents.language_id = :language_id &&
site_pages.page_id = :page_id
ORDER BY
news.create_date
a model rétegek pedig (app/Models):

class News extends Model
{
/**
* The table associated with the model.
*
* @var string
*/
protected $table = 'news';


/**
* Primary key.
*
* @var int
*/

protected $primaryKey = 'news_id';


public function NewsContents()
{
return $this->belongsTo('App\Model\NewsContents');
}
}

class NewsContents extends Model
{
/**
* The table associated with the model.
*
* @var string
*/
protected $table = 'news_contents';


/**
* Primary key.
*
* @var int
*/

protected $primaryKey = 'nl_id';


public function news()
{
return $this->hasMany('App\Model\News', 'news_id');
}

public function pages()
{
return $this->hasMany('App\Model\Page', 'language_id');
}
}

class Page extends Model
{
/**
* The table associated with the model.
*
* @var string
*/
protected $table = 'site_pages';


/**
* Primary key.
*
* @var int
*/

protected $primaryKey = 'page_id';


public function NewsContents()
{
return $this->belongsTo('App\Model\NewsContents');
}
}
Eddig már sikerült eljutnom:

$news_list = \App\Models\News::
			select(array('news_contents.news_id', 'news_contents.title', 'news_contents.seo_url', 'site_pages.page_url'))
			->leftjoin('news_contents','news.news_id','=','news_contents.news_id')
			->leftjoin('site_pages','site_pages.language_id','=','news_contents.language_id')
			->where('site_pages.page_id',$current_page_datas->page_id)
			->where('news_contents.language_id',$language_id)
			->orderBy('news.create_date', 'asc')
			->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:

class News extends Model
{
    /**
     * The table associated with the model.
     *
     * @var string
     */
    protected $table = 'news';
    
    
    /**
     * Primary key.
     *
     * @var int
     */
     
    protected $primaryKey = 'news_id';
    
    
    public function NewsContents()
    {
        return $this->hasMany('App\Models\NewsContents', 'news_id');
    }
}
NewsContents:

class NewsContents extends Model
{
    /**
     * The table associated with the model.
     *
     * @var string
     */
    protected $table = 'news_contents';
    
    
    /**
     * Primary key.
     *
     * @var int
     */
     
    protected $primaryKey = 'nl_id';
    
    
    public function news()
    {
        return $this->belongsTo('App\Models\News', 'news_id');
    }
    
    public function pages()
    {
        return $this->hasMany('App\Models\Page', 'language_id');
    }
}
Page:

class Page extends Model
{
    /**
     * The table associated with the model.
     *
     * @var string
     */
    protected $table = 'site_pages';
    
    
    /**
     * Primary key.
     *
     * @var int
     */
     
    protected $primaryKey = 'page_id';
    

    
    public function NewsContents()
    {
        return $this->belongsTo('App\Models\NewsContents', 'language_id');
    }
}
és ezzel az összekötéssel próbálkoztam:

$oNews = new \App\Models\News();
        
        $news_list = $oNews
             ->with("NewsContents")
                ->where('language_id', $language_id)
            ->with("pages")
                ->where('page_id', $current_page_datas->page_id)
            ->orderBy('create_date', 'asc')
            ->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!