2017-06-04 3 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)を格納することができないということであるに$ wher変数。これはエラーのスクリーンショットです: 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方法orの4番目のパラメータが条件orWhereを行います設定

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

です。

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

ありがとうございます。できます。条件についてもっと教えてください。どうすれば$条件配列のAND&OR節を使用できますか? –

+0

@SameerAliはその答えを更新しました。 – Sandeesh

+0

答えをありがとう。 :) –

1

whereが関数である、ので、あなたはこの

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

を行うことはできません。それは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、city_name = london、city_country = ukのようになります。 –

+0

それには別のwhere節を追加する必要があります。また、この問題について別の質問をしてください。私はあなたの元の質問に答えました。それがあなたの問題を解決したなら、upvoteして答えを受け入れてください。 – 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種類のモデルファイルを作成する必要がありますか?あなたが与えた例は1つのテーブルには良いものですが、私はすべてのテーブルに使える関数を書いています。私はCodeigniterでこれをやっていました。 –

+0

一般に、プロジェクトにこのような多数のテーブルが必要な場合は、100クラスの作成にも問題はありません。これは、クラスを使用する必要がある場合にのみロードされるため、負荷には影響しません。これにより、Eloquentが提供する膨大な数の利点、つまり関係、ミューテータ、オブザーバが得られます。コードはきれいで分かりやすくなります。 – Anton

関連する問題