如何使用模型和控制器在laravel 5中进行动态查询

时间:2017-12-14 12:04:38

标签: laravel codeigniter laravel-5

我在codeigniter中添加查询,如下所示:

控制器中的

$data=array(
            'table'=>'tbl_activity_log',
            'val'=>array(
                         'x'=>$x,
                         'y'=>$y,
                         'z'=>$z,
       ));
$log=$this->model->add_data($data); 

在模型add_data函数中这样:

function add_data($data)
{
  return $this->db->insert($data['table'],$this->security->xss_clean($data['val']));
}

但是在Laravel 5中我有:

$name=$Request->input('name');
$lname=$Request->input('lname');
$myItems = array(
                 'first_name'=>$name,
                 'last_name'=>$lname
           );

DB::table("tbl_user")->insert($myItems);

我的问题是,我们如何在Laravel中使表字段动态化并通过模型调用该函数。 另外,我如何从模型中调用该函数?请帮忙。我想要一个动态查询

2 个答案:

答案 0 :(得分:0)

您可以编写辅助函数

//create a helper function
function addModelData($arrayData = [])
{
    return \DB::table($arrayData['table'])->insert($arrayData['val']));
}

//in your controller or any place you like
$data=array(
            'table'=>'tbl_activity_log',
            'val'=>array(
                         'x'=>$x,
                         'y'=>$y,
                         'z'=>$z,
       ));
$log = addModelData($data); 

答案 1 :(得分:0)

您可以按official documentation

中所述创建模型
namespace App;

use Illuminate\Database\Eloquent\Model;

class User extends Model
{
    protected $table = 'tbl_user';

    // If your primary key is not 'id'
    protected $primaryKey = 'model_id';
}

现在在你的控制器中你可以使用这个模型:

namespace App\Http\Controller;

use App\User;
use Illuminate\Http\Request;

class MyController extends Controller {

    public function myAction(Request $request){
        $user = new User();
        $user->last_name = $request->input('lname');
        $user->first_name = $request->input('name');
        $user->save();
    }
}

您也可以使用mass assignment。但在您必须在模型中设置$fillable属性之前:

protected $fillable = ['first_name', 'last_name'];

现在您可以在控制器中使用质量分配:

$user =  User::create([
    'first_name' => $request->input('name'),
    'last_name'  => $request->input('lname')
]);

// alternatively:
$user = User::create($request->only(['name', 'lname']));