Php 动态查询ORM Laravel 4.2

Php 动态查询ORM Laravel 4.2,php,codeigniter,laravel,laravel-4,eloquent,Php,Codeigniter,Laravel,Laravel 4,Eloquent,好的,我有一个用CodeIgniter编写的通用模型,一位朋友问我是否可以为他将其转换为laravel4.2。我一直在做这个,我想大部分都是正确的,但是我被select语句卡住了 在CodeIgniter中,我有以下内容: public function getData($table, $multiple = 1, $field = FALSE, $val = FALSE){ if($field != FALSE){ // WHERE in case of FIELD

好的,我有一个用
CodeIgniter
编写的通用模型,一位朋友问我是否可以为他将其转换为
laravel4.2
。我一直在做这个,我想大部分都是正确的,但是我被select语句卡住了

CodeIgniter
中,我有以下内容:

public function getData($table, $multiple = 1, $field = FALSE, $val = FALSE){

    if($field != FALSE){
        // WHERE in case of FIELD / VAL :)
        $this->db->where($field, $val);
    }

    $query = $this->db->get($table);

    if($multiple == 1){
        // Multiple rows
        return $query->result_array();
    } else {
        // One row
        return $query->row_array();
    }
}
这里有人知道如何将此函数转换为
laravel4.2
语法吗? 我目前有:

public function getData($table, $multiple = 1, $field = FALSE, $val = FALSE){
    $result = DB::table($table);

}

我很快就被卡住了,因为我不知道如何在
Laravel 4.2
中通过拆分
查询的各个部分来达到同样的效果,就像我使用
CodeIgniter

一样,你可以用同样的方式链接方法:

public function getData($table, $multiple = 1, $field = FALSE, $val = FALSE)
{
    $query = DB::table($table);

    if ($field != FALSE) {
        // WHERE in case of FIELD / VAL :)
        $query->where($field, $val);
    }

    if ($multiple)
        return $query->get();
    else
        return $query->first();
}

您可以使用相同的方式链接方法:

public function getData($table, $multiple = 1, $field = FALSE, $val = FALSE)
{
    $query = DB::table($table);

    if ($field != FALSE) {
        // WHERE in case of FIELD / VAL :)
        $query->where($field, $val);
    }

    if ($multiple)
        return $query->get();
    else
        return $query->first();
}

您可以使用相同的方式链接方法:

public function getData($table, $multiple = 1, $field = FALSE, $val = FALSE)
{
    $query = DB::table($table);

    if ($field != FALSE) {
        // WHERE in case of FIELD / VAL :)
        $query->where($field, $val);
    }

    if ($multiple)
        return $query->get();
    else
        return $query->first();
}

您可以使用相同的方式链接方法:

public function getData($table, $multiple = 1, $field = FALSE, $val = FALSE)
{
    $query = DB::table($table);

    if ($field != FALSE) {
        // WHERE in case of FIELD / VAL :)
        $query->where($field, $val);
    }

    if ($multiple)
        return $query->get();
    else
        return $query->first();
}

Laravel的类似之处在于,您可以在实际执行查询之前,使用在多个阶段中构建查询。一旦你知道了这一点,翻译就非常简单:

public function getData($table, $multiple = 1, $field = FALSE, $val = FALSE)
{
    $query = DB::table($table);

    if($field){
        // WHERE in case of FIELD / VAL :)
        $query = $query->where($field, $val);
    }

    if($multiple) {
        return $query->get();
    }

    return $query->first();
}
我不认为这是一个很好的实践,尽管在一个有说服力的模型中依靠流利的语言,但是在有些情况下这是没有帮助的。如果当前的目标是将项目转换为Laravel,那么可能有调用代码依赖于此方法存在的事实。将函数转换为使用Elount而不是Fluent将更改函数的签名,并导致代码的其他部分中断,但看起来是这样的:

public function getData($multiple = true, $field = false, $val = false)
{
    $query = $this;

    if($field) {
        $query = $query->where($field, $val);
    }

    if($multiple) {
        return $query->get();
    }

    return $query->first();
}
// Instead of...
$result = $model->getData(1, 'field', 'value');

// You can do this:
$result = $model->where('field', 'value')->get();

// Or this if you'd rather not have multiple:
$result = $model->where('field', 'value')->first();
调用代码本身可以修改为在Laravel中执行完全相同的功能,如下所示:

public function getData($multiple = true, $field = false, $val = false)
{
    $query = $this;

    if($field) {
        $query = $query->where($field, $val);
    }

    if($multiple) {
        return $query->get();
    }

    return $query->first();
}
// Instead of...
$result = $model->getData(1, 'field', 'value');

// You can do this:
$result = $model->where('field', 'value')->get();

// Or this if you'd rather not have multiple:
$result = $model->where('field', 'value')->first();

从长远来看,在Eloquent(IMHO)内部使用此函数并不会真正为您节省太多,相反,这只会造成混乱。

Laravel的相似之处在于,您可以在实际执行查询之前使用在多个阶段构建查询。一旦你知道了这一点,翻译就非常简单:

public function getData($table, $multiple = 1, $field = FALSE, $val = FALSE)
{
    $query = DB::table($table);

    if($field){
        // WHERE in case of FIELD / VAL :)
        $query = $query->where($field, $val);
    }

    if($multiple) {
        return $query->get();
    }

    return $query->first();
}
我不认为这是一个很好的实践,尽管在一个有说服力的模型中依靠流利的语言,但是在有些情况下这是没有帮助的。如果当前的目标是将项目转换为Laravel,那么可能有调用代码依赖于此方法存在的事实。将函数转换为使用Elount而不是Fluent将更改函数的签名,并导致代码的其他部分中断,但看起来是这样的:

public function getData($multiple = true, $field = false, $val = false)
{
    $query = $this;

    if($field) {
        $query = $query->where($field, $val);
    }

    if($multiple) {
        return $query->get();
    }

    return $query->first();
}
// Instead of...
$result = $model->getData(1, 'field', 'value');

// You can do this:
$result = $model->where('field', 'value')->get();

// Or this if you'd rather not have multiple:
$result = $model->where('field', 'value')->first();
调用代码本身可以修改为在Laravel中执行完全相同的功能,如下所示:

public function getData($multiple = true, $field = false, $val = false)
{
    $query = $this;

    if($field) {
        $query = $query->where($field, $val);
    }

    if($multiple) {
        return $query->get();
    }

    return $query->first();
}
// Instead of...
$result = $model->getData(1, 'field', 'value');

// You can do this:
$result = $model->where('field', 'value')->get();

// Or this if you'd rather not have multiple:
$result = $model->where('field', 'value')->first();

从长远来看,在Eloquent(IMHO)内部使用此函数并不会真正为您节省太多,相反,这只会造成混乱。

Laravel的相似之处在于,您可以在实际执行查询之前使用在多个阶段构建查询。一旦你知道了这一点,翻译就非常简单:

public function getData($table, $multiple = 1, $field = FALSE, $val = FALSE)
{
    $query = DB::table($table);

    if($field){
        // WHERE in case of FIELD / VAL :)
        $query = $query->where($field, $val);
    }

    if($multiple) {
        return $query->get();
    }

    return $query->first();
}
我不认为这是一个很好的实践,尽管在一个有说服力的模型中依靠流利的语言,但是在有些情况下这是没有帮助的。如果当前的目标是将项目转换为Laravel,那么可能有调用代码依赖于此方法存在的事实。将函数转换为使用Elount而不是Fluent将更改函数的签名,并导致代码的其他部分中断,但看起来是这样的:

public function getData($multiple = true, $field = false, $val = false)
{
    $query = $this;

    if($field) {
        $query = $query->where($field, $val);
    }

    if($multiple) {
        return $query->get();
    }

    return $query->first();
}
// Instead of...
$result = $model->getData(1, 'field', 'value');

// You can do this:
$result = $model->where('field', 'value')->get();

// Or this if you'd rather not have multiple:
$result = $model->where('field', 'value')->first();
调用代码本身可以修改为在Laravel中执行完全相同的功能,如下所示:

public function getData($multiple = true, $field = false, $val = false)
{
    $query = $this;

    if($field) {
        $query = $query->where($field, $val);
    }

    if($multiple) {
        return $query->get();
    }

    return $query->first();
}
// Instead of...
$result = $model->getData(1, 'field', 'value');

// You can do this:
$result = $model->where('field', 'value')->get();

// Or this if you'd rather not have multiple:
$result = $model->where('field', 'value')->first();

从长远来看,在Eloquent(IMHO)内部使用此函数并不会真正为您节省太多,相反,这只会造成混乱。

Laravel的相似之处在于,您可以在实际执行查询之前使用在多个阶段构建查询。一旦你知道了这一点,翻译就非常简单:

public function getData($table, $multiple = 1, $field = FALSE, $val = FALSE)
{
    $query = DB::table($table);

    if($field){
        // WHERE in case of FIELD / VAL :)
        $query = $query->where($field, $val);
    }

    if($multiple) {
        return $query->get();
    }

    return $query->first();
}
我不认为这是一个很好的实践,尽管在一个有说服力的模型中依靠流利的语言,但是在有些情况下这是没有帮助的。如果当前的目标是将项目转换为Laravel,那么可能有调用代码依赖于此方法存在的事实。将函数转换为使用Elount而不是Fluent将更改函数的签名,并导致代码的其他部分中断,但看起来是这样的:

public function getData($multiple = true, $field = false, $val = false)
{
    $query = $this;

    if($field) {
        $query = $query->where($field, $val);
    }

    if($multiple) {
        return $query->get();
    }

    return $query->first();
}
// Instead of...
$result = $model->getData(1, 'field', 'value');

// You can do this:
$result = $model->where('field', 'value')->get();

// Or this if you'd rather not have multiple:
$result = $model->where('field', 'value')->first();
调用代码本身可以修改为在Laravel中执行完全相同的功能,如下所示:

public function getData($multiple = true, $field = false, $val = false)
{
    $query = $this;

    if($field) {
        $query = $query->where($field, $val);
    }

    if($multiple) {
        return $query->get();
    }

    return $query->first();
}
// Instead of...
$result = $model->getData(1, 'field', 'value');

// You can do this:
$result = $model->where('field', 'value')->get();

// Or this if you'd rather not have multiple:
$result = $model->where('field', 'value')->first();

从长远来看,在Eloquent(IMHO)内部使用此函数并不会真正为您节省太多,相反,这只会造成混乱。

感谢您的awnser,使用generalmodel的主要原因是可以快速访问基本查询,在实际使用之前,这些查询将始终被检查/验证。只是我的一个朋友并不完全热衷于后端编程,而是需要一种快速简便的方法来调用单个表上的一些基本查询(插入、选择、计数、更新和删除)。因为我自己在调用查询之前使用了一个带有预验证的generalmodel,所以我认为他最好使用simulair。感谢您的awnser,使用generalmodel的主要原因是可以快速访问基本查询,这些查询在实际使用之前都会被检查/验证。只是我的一个朋友并不完全热衷于后端编程,而是需要一种快速简便的方法来调用单个表上的一些基本查询(插入、选择、计数、更新和删除)。因为我自己在调用查询之前使用了一个带有预验证的generalmodel,所以我认为他最好使用simulair。感谢您的awnser,使用generalmodel的主要原因是可以快速访问基本查询,这些查询在实际使用之前都会被检查/验证。只是我的一个朋友并不完全热衷于后端编程,而是需要一种快速简便的方法来调用单个表上的一些基本查询(插入、选择、计数、更新和删除)。因为我自己在调用查询之前使用了一个带有预验证的generalmodel,所以我认为他最好使用simulair。感谢您的awnser,使用generalmodel的主要原因是可以快速访问基本查询,这些查询将始终是chec