2017-06-04 183 views
0

我想在Laravel中編寫一個動態更新查詢,它接受參數並可用於整個項目。Laravel 5.4:在變量中存儲'Where'子句

以下是我的控制器功能:

public function editquery(Request $request) 
    { 

    $city_id = $request->input('city_id');  
    $city_name = $request->input('city_name'); 

    $tbl = 'city';  
    $data = ['city_name'=>$city_name]; 
    $wher = ('city_id',1); 

    General_model::editrecord($data,$wher,$tbl); 

    return redirect()->action('[email protected]_page')->with('status','Record Updated Successfully!');; 

    } 

下面是我的模型功能:

public static function editrecord($data,$wher,$tbl) 
    { 
     return DB::table($tbl)->where($wher)->update($data); 
    } 

這裏唯一的問題是,我不能存儲的值( 'city_id',1)在$變量。這是錯誤的屏幕截圖: link to the image file

是否有任何其他方式來執行此操作。請幫忙。

回答

2

where方法接受一組條件。

$table = 'city'; 
$conditions = [ 
    ['city_id', '=', '1'] 
]; 
$data = ['city_name' => $city_name]; 

General_model::editRecord($table, $conditions, $data); 

// In your model 

public static function editRecord($table, $conditions, $data) 
{ 
    return DB::table($table)->where($conditions)->update($data); 
} 

您還可以設置多個條件。

$conditions = [ 
    ['city_id', '=', '1'], 
    ['test', '=', 'test'], 
]; 

編輯

這是默認where方法

where($column, $operator = null, $value = null, $boolean = 'and') 

第四個參數設置爲or就會使病情orWhere

$conditions = [ 
    ['city_id', '=', '1'], 
    ['test', '=', 'test', 'or'], 
]; 
+0

謝謝。有用。你能否告訴我更多關於條件的信息。如何在$ conditions數組中使用AND&OR子句? –

+0

@SameerAli更新了答案。 – Sandeesh

+0

感謝您的回答。 :) –

1

你不能做到這一點

public static function editrecord($data,$wher,$tbl) 
{ 
    return DB::table($tbl)->where($wher)->update($data); 
} 

因爲,where是一個函數;它期望2或3個參數,而不僅僅是1個參數。

你將不得不通過雙方的觀點,像這樣

public static function editrecord($data, $where_column, $where_val, $tbl) 
{ 
    return DB::table($tbl)->where($where_column, $where_val) 
         ->update($data); 
} 

然後,在你的控制器功能

$where_column = 'city_id'; 
$where_val = 1; 

General_model::editrecord($data,$where_column,$where_val,$tbl); 
+0

我應該改變我的控制器功能什麼? –

+0

如果我需要在where子句中使用AND OR語句,我該怎麼辦?例如,其中city_id = 1 AND city_name =倫敦AND city_country = uk。 –

+0

您需要爲此添加單獨的where子句。另外,請爲這個問題提出另一個問題。我已經回答你原來的問題。如果它解決了你的問題,那麼請註冊並接受答案。 – linuxartisan

0

您的代碼是不完全在Laravel的風格,你爲什麼會想創建一個單獨的靜態函數,如果這樣的任務很容易通過Eloquent/Query Builder的標準功能解決?

雄辯例如:

應用程序/ City.php

<?php 
class City extends Model { 
    protected $table = 'city'; 
    protected $primaryKey = 'city_id'; 
    protected $fillable = ['city_name']; 
} 

在你的控制器:

City::findOrFail($city_id)->update([ 
    'city_name' => $city_name 
]); 

查詢生成器例如:

DB::table('city')->where(['city_id' => $city_id])->update([ 
    'city_name' => $city_name 
]); 

這比以不可理解的方式做類似事情的函數更容易閱讀,理解和支持。

+0

我是Laravel的新手。假設我的數據庫中有超過100個表格,那麼我需要爲每個表格製作100個不同的模型文件嗎?你給的例子對一張表格很好,但是我想寫一個我可以用於所有表格的函數。我曾經在Codeigniter中這樣做過。 –

+0

一般來說,如果項目需要如此大量的表,那麼創建甚至100個類也沒什麼問題。這不會影響負載,因爲只有在需要使用類時才加載類。有了這個,你將獲得雄辯提供的大量優點:關係,變異者,觀察者。該代碼將保持乾淨,易於理解。 – Anton