【问题标题】:Translate from CodeIgniter Active Record model to Laravel Eloquent从 CodeIgniter Active Record 模型转换为 Laravel Eloquent
【发布时间】:2013-12-02 05:09:33
【问题描述】:

我是一名尝试采用 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();
}

【问题讨论】:

    标签: codeigniter model laravel laravel-4 eloquent


    【解决方案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();
    }
    

    【讨论】:

    • 那么,对于这样的事情,您忽略任何hasMany()belongsTo() 等?
    • 这是产品型号吗?如果是这样,这是否意味着 $query = Product... 是自引用的?
    • 有很多方法可以做这件事,这只是一种像你这样具有视觉表示的方法。但是我们当然可以把它全部改成非常“雄辩”。 $query = Product 只是创建查询构建器的一个实例,因此我们可以进一步使用。
    • 我认为您不会为此使用 Eloquent。此方法将为您提供更易于使用的结果。如果使用 Eloquent,您最终会得到一个产品集合,并且该集合中的每个产品都有单位、库存水平和类别的集合。既然你离开了,我假设在某些情况下会有空值,所以那些单位、库存水平和类别的集合会有不同数量的结果,你不可能有时间弄清楚什么搭配什么。
    • @AntonioCarlosRibeiro:是否有可能以另一种方式做到这一点?只是为了完整? |谁能解释一下使用 Eloquent 的时间/目的是什么?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-03-05
    • 1970-01-01
    • 2019-01-08
    • 1970-01-01
    • 2013-02-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多