2016-07-20 6 views
0
DB::table('New_Themes') 
       ->where('id', $id) 
       ->decrement('upVotes', 1); 
       DB::table('New_Themes') 
       ->where('id', $id) 
       ->increment('downVotes', 1); 
... 

У меня есть запрос на обновление, поэтому у меня есть по крайней мере 4 из этого (где и инкрементный материал), который повторяется, и требуется время для поиска по включенному.Laravel, Update Query и FirstorCreate Method

Мой вопрос: Там в любой ярлык, как сделать это

DB::table('New_Themes') 
       ->where('id', $id) 
       ->decrement('upVotes', 1); 
       ->increment('downVotes', 1); 

, но он не работает, любая идея, как сделать это проще?

Второй вопрос: Как использовать метод firstOrCreate в Laravel, мне нужна эта функция, чтобы сделать мой код проще. Но я не знаю, как интегрировать его с моделями, контроллерами.

Ex. $flight = App\Flight::firstOrCreate(['name' => 'Flight 10']); (from documentation) 

Какой переменный $ полет, логический или ...?, Любое объяснение будет очень полезно для меня, вызывают в документации Laravel отсутствует подробную информацию.

+0

Это будет объект, созданный/обновленный элемент. –

ответ

1

1.

function downVote($id) 
{ 
     DB::table('New_Themes') 
      ->where('id', $id) 
      ->decrement('upVotes', 1) 
      ->increment('downVotes', 1); 
} 

Тогда вам не придется вводить его, если вы используете более одного раза.

2.

$ полет является экземпляром модели полета, вы должны научиться использовать модель, это сделает вашу жизнь проще при работе с данными и полностью использовать архитектуру MVC док Laravels вполне хорошо задокументировано.

+0

это говорит мне: синтаксическая ошибка, неожиданный '->' (T_OBJECT_OPERATOR), почему это происходит? – DomainFlag

+0

Это происходит, когда я добавляю ниже -> increment ('downVotes', 1); – DomainFlag

+0

Я нашел эту finnaly DB :: table ('New_Themes') -> где ('id', $ id) -> update ([ 'upVotes' => DB :: raw ('upVotes - 1'), 'downVotes' => DB :: raw ('downVotes + 1'), ]); работает очень хорошо – DomainFlag

1
/** 
    * Get the first record matching the attributes or create it. 
    * 
    * @param array $attributes 
    * @return static 
    */ 
    public static function firstOrCreate(array $attributes) 
    { 
     if (! is_null($instance = static::where($attributes)->first())) 
     { 
      return $instance; 
     } 

     return static::create($attributes); 
    } 

Вы можете увидеть файл vendor/laravel/framework/src/Illuminate/Database/Eloquent/Model.php