0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

day16の今日は数式を使ったupdateのやり方を見ていきます。

Doctrine

<?php

declare(strict_types=1);

use App\Entity\Book;
use Doctrine\ORM\EntityManagerInterface;

require __DIR__.'/../vendor/autoload.php';

/** @var EntityManagerInterface $entityManager */
$entityManager = require __DIR__.'/bootstrap.php';

$qb = $entityManager->getRepository(Book::class)->createQueryBuilder('b');
$qb->update()->set('b.price', 'b.price * 1.1')->getQuery()->execute();

https://github.com/77web/doctrine-vs-eloquent/blob/8b69e952f860cf5bfdf9f7edd7152674a5545110/Doctrine/Usecase/update_with_formula.php

  • エンティティ自身の更新ではなく、クエリビルダを使って行います。
  • クエリビルダで更新した場合、取得済のBookエンティティのフィールドの値は更新されないので、更新後の値を持つエンティティを使って次の処理をしたい場合は $entityManager->refresh($book) のようにエンティティの値を更新する必要があります。

Eloquent

<?php

declare(strict_types=1);

use App\Models\Book;

require __DIR__.'/../vendor/autoload.php';
require __DIR__.'/bootstrap.php';

$q = Book::query();
$q->update(['price' => $q->raw('price * 1.1')]);

https://github.com/77web/doctrine-vs-eloquent/blob/8b69e952f860cf5bfdf9f7edd7152674a5545110/Eloquent/Usecase/update_with_formula.php

  • Model自体の更新ではなくクエリを使います。
  • 数式部分は raw() で囲う必要があります。(Laravelの中で使う場合、 DB::raw() でも良い)
  • クエリで更新した場合、取得済のBookモデルのフィールドの値は更新されないので、更新後の値を持つモデルを使って次の処理をしたい場合は $book->refresh() のようにモデルの値を更新する必要があります。
0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?