laravel 4如何通过口才订购和加入

时间:2014-11-29 13:25:53

标签: php laravel-4 eloquent

我是Laravel 4中的新手,现在我正在为小项目编码,我使用laravel作为构建我的网站的框架,但我的代码我总是想知道它是否优化,因为在我的模型中我刚才写道:

类别模型     

     public function parents()
    {
        return $this->belongsTo('Category', 'cat_father');
    }

     public function children()
    {
        return $this->hasMany('Category', 'cat_father');
    }

}

发布模型:

<?php
class Post extends BaseModel{
    public $table = "post";
    protected $primaryKey = 'idpost';

     public function Category()
    {
        return $this->belongsTo('Category', 'cat_id');
    }



}

因为我不知道如何在laravel 4中加入2个表,我有一个条件是从我的类别中查找所有帖子,它不属于类别名称“Reunion”,但我不知道如何为此,我为此目的编写了2行代码(我不确定在控制器中编写代码是最好的方法,但我不知道如何从模型调用方法到控制器并获取返回值)

我从控制器中选择所有帖子的方法,它不属于类别名称“Reunion”

public function getAllPostView()
    {       
        $getCat = Category::where('cat_name','=', 'Reunion')->firstOrFail();                            
        $post = Post::where('cat_id', '!=', $getCat->idcategory)->get();
        return View::make('layouts.post')->with('post',$post);
    }   

我的问题是,当我在控制器中编写代码时,我的代码是优化的吗?以及如何在模型中编写它并获取参数以将其传递给控制器​​并使用它来查看。 第二个问题是如何订购“POST”,因为有些案例需要从新旧订购

2 个答案:

答案 0 :(得分:0)

可以使用简单的joins

public function getAllPostView()
{       
    $getCat = Category::where('cat_name','=', 'Reunion')  
            ->join('post','post.cat_id', '!=','Category.idcategory')->get();
    return View::make('layouts.post')->with('post',$post);
}   

在两个表中查找相同的字段名称,如果可以,请使用select

$getCat = Category::select('Category.idcategory as cat_id','Category.cat_id as pos_id','many other fields')
               // 'as cat_id' not required for unique field names
            ->join('post','post.cat_id', '!=','Category.idcategory')
            ->where('cat_name','=', 'Reunion')  
            ->get();

答案 1 :(得分:0)

您就是这样做的:

$exclude = 'Reunion';

$posts = Post::select('posts.*')->join('categories', function ($j) use ($exclude) {
  $j->on('posts.cat_id', '=', 'categories.idcategory')
    ->where('categories.name', '<>', $exclude);
})->get();