天道酬勤,学无止境

Laravel Query Builder Update with Increment

Hi I need to fix my query where I will need to update my product quantity with just incrementing it, here is my code with sample.

    DB::table('product_warehouse')
    ->where('product_id', $product_id)
    ->where('warehouse_id', $warehouse_id)
    ->update(['product_qty' => $old_qty+$product_qty]);

评论

You can try both ways:

DB::table('product_warehouse')
    ->where('product_id', $product_id)
    ->where('warehouse_id', $warehouse_id)
    ->update(['product_qty' => DB::raw('product_qty + ' . $product_qty)]);

Or

DB::table('product_warehouse')
    ->where('product_id', $product_id)
    ->where('warehouse_id', $warehouse_id)
    ->increment('product_qty', $product_qty);

受限制的 HTML

  • 允许的HTML标签:<a href hreflang> <em> <strong> <cite> <blockquote cite> <code> <ul type> <ol start type> <li> <dl> <dt> <dd> <h2 id> <h3 id> <h4 id> <h5 id> <h6 id>
  • 自动断行和分段。
  • 网页和电子邮件地址自动转换为链接。

相关推荐
  • Laravel中的增量列(Increment columns in laravel)
    问题 有没有一种方法可以在Laravel中增加一个以上的列? 比方说: DB::table('my_table') ->where('rowID', 1) ->increment('column1', 2) ->increment('column2', 10) ->increment('column3', 13) ->increment('column4', 5); 但这导致: Call to a member function increment() on integer 我只想找到一种有效的方法来使用laravel中的给定功能。 谢谢。 任何建议都可以。 回答1 没有现有功能可以执行此操作。 您必须使用update() : DB::table('my_table') ->where('rowID', 1) ->update([ 'column1' => DB::raw('column1 + 2'), 'column2' => DB::raw('column2 + 10'), 'column3' => DB::raw('column3 + 13'), 'column4' => DB::raw('column4 + 5'), ]); 回答2 Laravel雄辩模型中的增减 添加到购物车选项是电子商务网站中最重要的功能之一。 棘手的部分是获取购物车中要显示在购物车图标上的项目数。
  • PHPStorm无法识别Laravel 5.0中我的Model类的方法(PHPStorm is not recognizing methods of my Model class in Laravel 5.0 [duplicate])
    问题 这个问题已经在这里有了答案: 在PhpStorm中雄辩的ORM代码提示(6个答案) 3个月前关闭。 未能将数据插入数据库,并且未在IDE(phpStrom)中显示所有未找到的查询类和Model类的方法,我该如何解决呢? 这是我的扩展类(Post.php),这里显示最新的错误以及where方法: <?php namespace App; use Carbon\Carbon; use Illuminate\Database\Eloquent\Model; class Post extends Model { protected $fillable=[ 'title', 'description', 'location', 'contact', 'type', 'published_at' ]; protected $date=['published_at']; public function setPublishedAtAttribute($date) { $this->attributes['published_at'] = Carbon::createFromFormat('Y-m-d', $date); } /** * @param $query */ public function scopePublished($query) { $query->where(
  • 创建和更新Laravel雄辩(Creating and Update Laravel Eloquent)
    问题 插入新记录或更新新记录(如果存在)的快捷方式是什么? <?php $shopOwner = ShopMeta::where('shopId', '=', $theID) ->where('metadataKey', '=', 2001)->first(); if ($shopOwner == null) { // Insert new record into database } else { // Update the existing record } 回答1 这是“ lu cip”在说什么的完整示例: $user = User::firstOrNew(array('name' => Input::get('name'))); $user->foo = Input::get('foo'); $user->save(); 以下是Laravel最新版本上的文档的更新链接 此处的文档:更新的链接 回答2 已更新:2014年8月27日-[ updateOrCreate内置到核心...] 以防万一人们仍然遇到这个问题...我在写这篇文章后几周才发现,这实际上是Laravel Eloquent核心的一部分... 探究Eloquent的等效方法。 您可以在这里看到: https://github.com/laravel/framework/blob/4.2/src/Illuminate
  • Laravel数据库操作
    Laravel提供了3种操作数据库方式:DB facade(原始方式)、查询构造器和Eloquent ORM。 数据库的配置文件在config目录下的database.php里。打开这个文件,找到mysql的配置项。 这里有个env,它其实是调用了laravel根目录下的.env文件,这个文件存储了数据库的配置信息。打开它。修改为项目的数据库信息即可。 请自行建一个数据库,其中数据库得包含vipinfo表,并且插入一些数据,以方便下面使用。表的结构如下图。 顾名思义:这张表是会员表,分别有会员ID(主键),会员名字,会员类型,会员积分等字段。 一、数据库操作之DB facade 在app->Http->Controllers目录下新建一个Student控制器,StudentController.php。 StudentController.php代码如下: <?php namespace App\Http\Controllers; use Illuminate\Support\Facades\DB; class StudentController extends Controller { } 1.查询操作 在Student控制器里添加一个test1方法,查询用的是DB类的静态方法select(),参数是原生的sql语句,返回的是一个二维数组。dd()是laravel提供的方法
  • Laravel 操作数据库 - 模型类&DB类
    一、使用DB类操作数据库 配置好数据库连接后,就可以使用DB类来运行查询。DB类为每种查询提供了相应方法:select, update, insert, delete和statement。 1、运行原生sql查询 注意:原生sql语句中的数据表名,必须是包含前缀的完整表名。 -> 运行 select/insert/update/delete 查询 $results = DB::select('select * from users where id = ?', [1]); select方法以数组的形式返回结果集,数组中的每一个结果都是一个PHP StdClass对象,从而允许你像下面这样访问 结果值: foreach ($results as $user) { echo $user->name; } -> 运行一个通用语句 有些数据库语句不返回任何值,对于这种类型的操作,可以使用DB类的statement方法:该方法返回布尔值true或false,代表语句执行成功或失败。 DB::statement('drop table users'); 2、查询构建器 指定操作的数据表: DB::table(表名); 注:查询构建器中table方法中的表名,是不包含前缀的表名。 -> 查询数据 ①获取多条数据–get方法 $users = DB::table('users')->where(
  • 更改架构构建器中的列长度?(Alter column length in Schema builder?)
    问题 我有两个字段需要增加字符限制。 我通读了文档,令我惊讶的是我没有找到它的选项。 有可能吗? 如果没有,我应该如何解决这个问题? 我可以删除该列并使用正确的属性重新创建它,但我不想丢失数据库中的任何数据。 回答1 使用原始查询: /** * Make changes to the database. * * @return void */ public function up() { DB::query('ALTER TABLE mytable MODIFY mycolumn VARCHAR(new-length)'); } /** * Revert the changes to the database. * * @return void */ public function down() { DB::query('ALTER TABL mytable MODIFY mycolumn VARCHAR(old-length)'); } 替换mytable 、 mycolumn 、 new-length和old-length 。 对于 Laravel 5+,将DB::query替换为DB::statement 。 回答2 对于 Laravel 4 DB::update('ALTER TABLE `my_table` MODIFY `my_column` VARCHAR(<new
  • 在执行查询之前,如何从Laravel的查询生成器中获取原始查询字符串?(How can I get the raw query string from Laravel's query builder BEFORE executing the query?)
    问题 我有一个由一些条件创建的复杂查询,我想从将要执行的构建器对象中获取最终的SQL查询。 我可以那样做吗? 回答1 您可以执行以下操作: $query = DB::table('brands') ->join('products','a','=','c') ->whereNull('whatever'); echo $query->toSql(); 但是Laravel不会在查询中显示参数,因为参数是在准备查询后绑定的。 因此,您也可以执行以下操作: print_r( $query->getBindings() ); 回答2 对于调试来说,这很方便,因为它返回带有绑定的SQL,因此您可以立即将其放入数据库控制台。 /** * Combines SQL and its bindings * * @param \Eloquent $query * @return string */ public static function getEloquentSqlWithBindings($query) { return vsprintf(str_replace('?', '%s', $query->toSql()), collect($query->getBindings())->map(function ($binding) { return is_numeric($binding) ?
  • 如何使用 Eloquent 删除表中的所有行?(How to delete all the rows in a table using Eloquent?)
    问题 我的猜测是使用以下语法: MyModel::all()->delete(); 但这没有用。 我确定它非常简单,但我已经搜索了有关该主题的文档,但找不到! 回答1 MyModel::all()->delete()不起作用的原因是因为all()实际上触发了查询并返回了 Eloquent 对象的集合。 您可以使用 truncate 方法,这适用于 Laravel 4 和 5: MyModel::truncate(); 这会删除表中的所有行,而不记录单个行的删除。 回答2 Laravel 5.2+解决方案。 Model::getQuery()->delete(); 只需使用表名获取底层构建器并执行任何操作。 没有比这更整洁的了。 Laravel 5.6解决方案 \App\Model::query()->delete(); 回答3 如果禁用foreign_key_checks (我假设您使用MySQL),则可以使用Model::truncate() )。 DB::statement("SET foreign_key_checks=0"); Model::truncate(); DB::statement("SET foreign_key_checks=1"); 回答4 我已经看到这两种方法都用于种子文件。 // Uncomment the below to wipe the table
  • Laravel Eloquent vs查询构建器-为什么使用eloquent降低性能(Laravel Eloquent vs query builder - Why use eloquent to decrease performance [closed])
    问题 关门了。 这个问题需要更加集中。 它当前不接受答案。 想要改善这个问题吗? 更新问题,使其仅通过编辑此帖子即可将重点放在一个问题上。 1年前关闭。 改善这个问题 我在Laravel查询生成器和雄辩者之间进行了一些性能测试。 使用各种sql语句(select-update-delete-insert),查询生成器的速度要快得多。 所以我的问题是:为什么有人对普通查询生成器使用Laravel Eloquent? 回答1 雄辩的是Laravel的Active Record模式的实现,它具有所有优点和缺点。 Active Record是一种以CRUD方式处理单个实体的好方法-即创建一个具有填充属性的新实体,然后将其保存到数据库,从数据库加载记录或删除。 您将从Eloquent的功能中受益匪浅,例如脏检查(仅针对已更改的字段发送SQL UPDATE),模型事件(例如,在有人创建新帐户时发送管理警报或更新统计信息计数器),特征(时间戳,软删除,自定义特征)急切/延迟加载等。您还可以应用域驱动模式并在Active Record实体中实现一些业务逻辑,例如验证,管理关系,计算等。 但是,正如您已经知道的那样,Active Record附带了一些性能价格。 当您处理一条记录或几条记录时,无需担心。 但是对于读取大量记录的情况(例如,用于数据网格,用于报告,用于批处理等),普通的Laravel
  • Laravel:在使用查询生成器或 Eloquent ORM 时在每次插入/更新时执行一些任务(Laravel: performing some task on every insert/update when using Query Builder or Eloquent ORM)
    问题 问题 我想自动将created_by和modified_by字段添加到 Laravel 4 中数据库表的每次插入/更新中,无论我使用的是 Eloquent 还是 Query Builder。 但是,并非我的所有表都有这些字段,因此任何解决方案都必须在添加之前检查这些列是否存在。 尝试的解决方案 我扩展了 Illuminate\Database\Eloquent\Model 类并编写了一个覆盖方法save()以便为每个保存的记录添加一些额外的元数据字段。 这很好,只是如果我使用查询生成器执行插入,则会绕过。 查看Model类,似乎数据库操作实际上是使用查询构建器完成的。 我查看了 Illuminate\Database\Query\Builder 模型,看起来我可以为insert()和update()编写覆盖方法。 这是为每次插入/更新执行某些任务的明智方法,还是我以后会遇到麻烦? 回答1 补充上面的答案。 你可以做这样的事情。 在应用程序/模型中创建一个名为 BaseModel.php 扩展 \Eloquent 的类 class BaseModel extends \Eloquent{ public static function boot() { parent::boot(); static::creating(function($model) { //change to
  • Laravel雄辩地无法使用复合主键保存模型(Laravel Eloquent CANNOT Save Models with Composite Primary Keys)
    问题 定义复合主键然后在实例模型上调用save时,将引发异常。 ErrorException (E_UNKNOWN) PDO::lastInsertId() expects parameter 1 to be string, array given 错误发生在第32行 $id = $query->getConnection()->getPdo()->lastInsertId($sequence); 这是Model的声明 class ActivityAttendance extends Eloquent { /** * The database table used by the model. * * @var string */ protected $table = 'activity_attendance'; /** * The primary key of the table. * * @var string */ protected $primaryKey = array('activity_id', 'username'); /** * The attributes of the model. * * @var array */ protected $guarded = array('activity_id', 'username', 'guests'); /** *
  • 具有两个主键的Laravel模型更新(Laravel Model with Two Primary Keys update [duplicate])
    问题 这个问题已经在这里有了答案: 如何在Laravel 5中的模型中放置组合键? (8个答案) 4年前关闭。 我正在尝试更新具有两个主键的Model。 模型namespace App; use Illuminate\Database\Eloquent\Model; class Inventory extends Model { /** * The table associated with the model. */ protected $table = 'inventories'; /** * Indicates model primary keys. */ protected $primaryKey = ['user_id', 'stock_id']; ... 移民 Schema::create('inventories', function (Blueprint $table) { $table->integer('user_id')->unsigned(); $table->integer('stock_id')->unsigned(); $table->bigInteger('quantity'); $table->primary(['user_id', 'stock_id']); $table->foreign('user_id')->references('id')
  • Laravel: performing some task on every insert/update when using Query Builder or Eloquent ORM
    The Problem I would like to automatically add created_by and modified_by fields to every insert/update to a database table in Laravel 4, regardless of whether I am using Eloquent or Query Builder. However, not all my tables have these fields so any solution will have to check these columns exist before adding. Attempted Solution I have extended the Illuminate\Database\Eloquent\Model class and written an overwrite method save() in order to add some additional meta data fields for every record that is saved. This is fine except that if I perform an insert using the Query Builder then this is
  • 查询中的问号运算符(Question mark operator in query)
    问题 在我的laravel 5应用中,我使用的是PostgreSQL的jsonb数据类型,它具有? 操作员。 但是我无法在模型中使用它,因为laravel使用问号作为绑定。 具体来说,在whereRaw()方法中: $query->whereRaw("jsonb_column ? 'a_key'") 如何在查询中使用问号? 回答1 您可以考虑使用函数调用而不是运算符。 首先,您应该找出哪个功能? 操作员通过以下查询在PostgresSQL数据库上使用: SELECT oprname, oprcode FROM pg_operator WHERE oprname = '?' 在我的开发数据库上,它是jsonb_exists函数,然后您可以将查询更新为: $query->whereRaw("jsonb_exists(jsonb_column, 'a_key')") 希望对您有所帮助,编码愉快。 回答2 基本上,您有2个选择: 通过扩展Laravel的Query Builder实现whereRaw的当前方式来弄污你的手,否则很难做到。 向Laravel团队发送功能请求(例如,要求他们扩展处理更多PostgresQL详细信息的所有Query Builder组件),如果您有足够的耐心,他们会尽力解决。 这是我对[1.]选项的看法: 命名空间“ Illuminate \ Database \
  • Laravel Eloquent vs query builder - Why use eloquent to decrease performance [closed]
    Closed. This question needs to be more focused. It is not currently accepting answers. Want to improve this question? Update the question so it focuses on one problem only by editing this post. Closed 1 year ago. Improve this question I did some performance test between Laravel query builder and eloquent. Query builder was much faster with various of sql statement (select-update-delete-insert). So my question is: Why someone uses Laravel Eloquent against plain query builder?
  • 更新时无需触碰时间戳(Laravel)(Update without touching timestamps (Laravel))
    问题 是否可以在不触摸时间戳的情况下更新用户? 我不想完全禁用时间戳。 格雷茨 回答1 暂时禁用它: $user = User::find(1); $user->timestamps = false; $user->age = 72; $user->save(); 您可以选择在保存后重新启用它们。 这仅是Laravel 4和5的功能,不适用于Laravel 3。 回答2 在Laravel 5.2 ,您可以将public field $timestamps为false如下所示: $user->timestamps = false; $user->name = 'new name'; $user->save(); 或者,您可以将选项作为save()函数的参数传递: $user->name = 'new name'; $user->save(['timestamps' => false]); 为了更深入地了解其工作原理,您可以在performUpdate(Builder $query, array $options = [])方法中查看类\Illuminate\Database\Eloquent\Model performUpdate(Builder $query, array $options = []) \Illuminate\Database\Eloquent\Model :
  • 仅当用户使用Laravel处于活动状态时登录(Login only if user is active using Laravel)
    问题 我目前正在使用Laravel应用程序,为了防止垃圾邮件,我决定只有活跃的用户才能登录。 我目前正在使用Laravel的登录系统,就像Laravel的官方网站教程一样,这是我的表单操作: <form class="form-horizontal" role="form" method="POST" action="{{ url('/auth/login') }}"> 这完全可以正常工作,但是我想检查用户的活动状态,如果不活动,它将被重定向到激活页面,否则它将登录。 有没有简单的方法可以执行此操作,或者我有义务制作新的控制器,路由和进行更多验证? 谢谢你。 编辑:忘记提及我的数据库中有一个“活动”列。 回答1 Laravel 5.4 / 5.5 通过将此函数放置在LoginController覆盖默认的login()函数: public function login(\Illuminate\Http\Request $request) { $this->validateLogin($request); // If the class is using the ThrottlesLogins trait, we can automatically throttle // the login attempts for this application. We'll key this
  • Laravel 4:如何运行原始SQL?(Laravel 4: how to run a raw SQL?)
    问题 我想在Laravel 4中重命名表,但是不知道该怎么做。 SQL将alter table photos rename to images 。 如果有一个雄辩的解决方案,我也想知道如何运行原始SQL,因为有时别无选择。 回答1 在Laravel 4手册中-讨论了执行以下原始命令: DB::select(DB::raw('RENAME TABLE photos TO images')); 编辑:我刚刚在Laravel 4文档中发现了这一点,它可能更好: DB::statement('drop table users'); 更新:在Laravel 4.1(也许是4.0-我不确定)中,您也可以针对原始的Where查询执行此操作: $users = User::whereRaw('age > ? and votes = 100', array(25))->get(); 进一步更新如果您特别希望进行表重命名-有一个用于此的模式命令-有关此信息,请参见下面的Mike回答。 回答2 实际上,Laravel 4在Illuminate / Database / Schema / Builder.php中确实具有表重命名功能,但目前尚无文档记录: Schema::rename($from, $to); 。 回答3 您也可以使用DB::unprepared为ALTER TABLE查询。 DB
  • 如何在Laravel 5中的模型中放置组合键?(How I can put composite keys in models in Laravel 5?)
    问题 我的数据库中有一个带有两个主键(id和language_id)的表,需要将其放入模型中。 模型中的默认primaryKey(Laravel 5中的Model.php)是id,我希望primaryKeys将是id和id_language。 我试着用数组或带','的字符串把它放进去,但是它不起作用。 它说我无法将数组转换为String。 回答1 你不能口才不支持复合主键。 这是与此相关的Github问题。 回答2 我写了这个简单的PHP特性,以使Eloquent能够处理复合键: <?php namespace App\Model\Traits; // *** Adjust this to match your model namespace! *** use Illuminate\Database\Eloquent\Builder; trait HasCompositePrimaryKey { /** * Get the value indicating whether the IDs are incrementing. * * @return bool */ public function getIncrementing() { return false; } /** * Set the keys for a save update query. * * @param
  • Laravel 5.1创建或更新副本(Laravel 5.1 Create or Update on Duplicate)
    问题 在Laravel 5.1中,对于MySQL插入,我想查看记录是否已存在,并重复更新,如果不存在则创建新记录。 我已经搜索过答案,其中的答案是旧的laravel版本。 在一个旧主题中,它说去年在核心中添加了新的updateOrCreate()方法。 但是当我尝试这样做时,我得到了错误: Integrity constraint violation: 1062 Duplicate entry '1' for key 'app_id' 这是我使用的查询: AppInfo::updateOrCreate(array( 'app_id' => $postData['appId'], 'contact_email' => $postData['contactEmail'] )); 其中app_id是该表中的唯一外键,我想更新记录(如果存在)或创建一个新记录。 我尝试搜索5.1文档,但找不到所需的信息。 有人可以在这里指导我吗... 回答1 根据雄辩模型方法“ updateOrCreate()”的定义 函数updateOrCreate(array $ attributes,array $ values = []){} 这需要两个论点... 一个是您要用来检查数据库中是否存在记录的属性第二个是您要创建或更新的新属性值 AppInfo::updateOrCreate(['app_id' =>