从CodeIgniter Active Record模型转换为Laravel Eloquent

时间:2013-11-18 21:19:43

标签: codeigniter model laravel laravel-4 eloquent

我是一名试图采用Laravel的CodeIgniter,但是,我在理解如何使用Eloquent方面遇到了很多问题。

我怀疑如果我能弄清楚如何将我的一些CodeIgniter模型方法转换为Laravel Eloquent,我可能会更好。希望这可以帮助其他人解决同样的问题。

请有人请将以下内容从CodeIgniter重写为Eloquent:

public function get_products($product_id = NULL, $category_id = NULL, $limit = NULL)
{
    $this->db->select('*, product.id AS product_id');
    $this->db->from('product');
    $this->db->join('product_unit', 'product.source_unit_id = product_unit.id', 'left');
    $this->db->join('stock_levels', 'product.stock_level_id = stock_levels.id', 'left');
    $this->db->join('categories', 'product.category_id = categories.cat_id', 'left');
    if(isset($product_id)) {
        $this->db->where('product.id', $product_id);
    }
    if(isset($category_id)) {
        $this->db->where('product.category_id', $category_id);
    }
    if(isset($limit)) {
        $this->db->limit($limit);
    }
    #$this->db->order_by('categories.cat_name', 'ASC');
    $this->db->order_by('categories.cat_name', 'ASC');
    $this->db->order_by('product.name', 'ASC');
    $query = $this->db->get();
    return $query->result_array();
}

1 个答案:

答案 0 :(得分:1)

这是您的查询的近似版本,应该有一些要调整的内容,但我希望您明白这一点:

public function get_products($product_id = NULL, $category_id = NULL, $limit = NULL)
{
   $query = Product::leftJoin('product_unit', 'source_unit_id', '=', 'product_unit.id')
                    ->leftJoin('stock_levels', 'stock_level_id', '=', 'stock_levels.id')
                    ->leftJoin('categories', 'category_id', '=', 'categories.cat_id');

    if(isset($product_id)) {
        $query->where('product.id', $product_id);
    }

    if(isset($category_id)) {
        $query->where('product.category_id', $category_id);
    }

    if(isset($limit)) {
        $query->limit($limit);
    }

    #$this->db->order_by('categories.cat_name', 'ASC');
    $query->orderBy('categories.cat_name', 'ASC');
    $query->orderBy('product.name', 'ASC');

    dd( $query->toSql() ); /// this line will show you the sql generated and die // remove it to execute the query

    return $query->get()->toArray();
}