動画: https://youtu.be/QHjRGPw34EI?si=MWb-1v1i1S5MG0eE プロポーザル: https://fortee.jp/phperkaigi-2023/proposal/6211083d-fc51-49a3-8b27-485d8e231b1f
タグ検索の該当結果が少ないため、タイトル検索結果を表示しています。
Laravelでドメイン駆動設計(DDD)を実践し、Eloquent Model依存の設計から脱却する この記事はドメイン駆動設計#1 Advent Calendar 2019の 10 日目の記事です。 2020/12/17追記 以下に続編を書きました! LaravelにDDDを導入して1年経った所感(達成したこと / 課題点 / モデリングの難しさなど) やったこと 自社サイトのバックエンドを Laravel で実装して半年間が経ち、初期に考えた設計にいろいろと綻びが出てきたと感じていました。 そんな中、ちょうど実践ドメイン駆動設計や Web+DB Press で特集された体験 DDD を読むことができたので、さっそくいくつかの機能を DDD で実装してみました。 本記事では「もともと Laravel で実践していたEloquent Model 依存の設計」の問題点を提起し、「DDD を
はじめに Laravel Eloquent には whereHas() というメソッドがあります.このメソッドは,リレーション先のテーブルを検索条件に含めたい時に活用できるものです. 例を示します. 今,Author モデルと Book モデルが hasMany の関係(1:他 の関係)で定義されているとします. use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Relations\HasMany; /** * @property int $id PK * @property string $name 氏名 */ class Author extends Model { public function books(): HasMany { return $this->hasMany(Book::
【Laravel】 Eloquent の has() や whereHas() が遅い?なら速くしてやるぜPHPMySQLSQLLaravelEloquent はじめに 2021/10/21 追記: Postgres は MySQL と異なり,相関サブクエリの JOIN 最適化もカバーしています。それゆえ,主にこの記事の内容は MySQL を想定したものとなっております。 (情報提供: @KentarouTakeda) 2022/12/22 追記: MySQL もバージョン 8.0.16 以降では Postgres に似た最適化が入るようになりました。そのため,殆どの場合ではもはや has() whereHas() を素直に使うだけで十分になっています: 【ガチ検証】Eloquent whereHas() はもう遅くないよ! Laravel は「リレーション先が存在するか」という制約条件を
Do not speak Portuguese? Translate this site with Google or Bing Translator A cheat sheet for Laravel’s Eloquent ORM version 5.5. One to One Relationship Demo details: In this demo we have 2 models (Owner and Car), and 2 tables (owners and cars). Business Rules: The Owner can own one Car. The Car can be owned by one Owner. Relations Diagram: Relationship Details: The Cars table should store the Ow
煽りタイトルすみません。 Laravelタグをつけてはいますが、特定の言語/フレームワークに限らない、Like検索時のエスケープの注意点についてお話します。 (@wand_ta 指摘ありがとうございます! 修正しました) 本記事の対象読者 安易に以下のようなコードを書いてしまう方 $query->where('name', 'like', "%{$keyword}%") addcslashes ? ナニソレ? 旨いの? って方 1つのバックスラッシュを含むデータを検索するためにコードでは8個のバックスラッシュを書かなければならない場合があることに驚きを隠せない方 DB::select("SELECT * FROM items WHERE name LIKE '%\\\\\\\\%'") よくある間違い 商品テーブルに「100%りんご」という名前のデータが登録されているとします。 あなたの実
Eloquentを用いたリレーションテーブルにおいて、効果的なサブクエリの使い方を紹介します。 リレーショナルなテーブル扱う場合にはN+1問題は常に意識されるべきであり、Eager Loadingを使ったクエリの削減は誰もが行なっているでしょう。 Laravelにおいてもwithメソッドを使うことで簡単にEager Loadingが行えますが、1対多 (hasMany)や多対多 (belongsToMany)の関係においてはサブクエリを使うことでパフォーマンスが改善され、システムの見通しがとてもよくなる場合があります。 要件 例として、ユーザーがログインした時にログイン履歴を残すシステムがあり、ユーザー一覧を表示するページで、ユーザー情報に加えて最終ログインデータを表示させるものとします。 Name Email LastLogin
はじめに Laravel を使っていると避けては通れない ORM の Eloquent. データベースをオブジェクト指向っぽく扱えるため非常に便利で,複雑なリレーションも簡単に扱えちゃう魔法の道具です. 例えば,主キーでモデルを取得するには以下のように書けば簡単に DB からデータが取得できます. 簡単ですね😁 さて,Laravel を使ったプロジェクトに限らず,プロダクトを開発する中で「テストコード」を書くことがありますが,テストを書く際にしばしば モック を使うことがあります. モック(オブジェクト)は,テスト対象となるクラスが依存する外部クラスの振る舞いを定義するもので,本来使われるはずのオブジェクトの代わりに差し込むことで,テスト結果が外部のロジックによって左右されるのを防ぐことができます. Laravel 使って開発をしているなら, Mockery というモックライブラリを使っ
優技録 var 優技録 = []string{ "Golang", "Vue.js", "AWS", "PHP", "DB", "IaC", "SRE"} Facebook Twitter GitHub ORMさんとのお付き合い 利用するメソッドの戻り値をすべて把握して処理 パラメータ配列の添字が空やNULLを考慮 get()やfind()でオブジェクトが存在しない時の考慮 first()やget()でオブジェクトが存在しない時の考慮 大事なことです🐱 PHP 判定チェック isset empty if is_null first()の場合 よくないパターン $user_instance = new User(); $user = $user_instance->find($user_id)->first(); $user_name = $user->name; $userのオブジェクト
背景 Laravelを使いつつも、DDDで設計を行っていて、 Eloquentモデルをドメインモデルと区別するために、 EloquentReservation、EloquentOptionといった名前にすることがありました。 この場合、デフォルトの設定だとテーブル名を、 eloquent_reservations、eloquent_optionsとしなくてはならず、 長ったらしくなってしまいます。 そこで、関連するテーブル名をカスタマイズする方法を調べたのでここにメモします。 結論 と、いっても簡単で、$tableプロパティにテーブル名を設定するだけです。 namespace App; use Illuminate\Database\Eloquent\Model; class EloquentReservation extends Model { /** * モデルと関連しているテーブル
こんばんは。 GW後半が始まりましたが、皆様はいかがお過ごしでしょうか。 僕はというと、タイトル通り、某企画サイトのバックエンド側を実装しておりました。 (仕事ではなく、プライベートでの趣味の一環です。とある方から依頼を受けました。) 本番環境の制約 今回の要件 要件の実現方法 今回利用した各フレームワーク、ライブラリのバージョン 開発環境 Twitter OAuth認証によるユーザ識別 Slimの導入 ディレクトリ構成の検討 Slim Skeletonプロジェクトの作成 作成後のディレクトリ構成 データベース接続 Eloquent ORMの導入(と、Twigの導入) DBテーブルとモデルクラスの作成 コントローラ作成 ルーティングの設定 ビューの設定 静的ファイルの配置 最後に、その他感想 本番環境の制約 依頼元の本番環境のサーバーがレンタルサーバーということもあり、 利用できる言語はP
イントロダクションIntroduction アクセサとミューテタはモデルの取得や値を設定するときに、Eloquent属性のフォーマットを可能にします。たとえばLaravelの暗号化を使いデータベース保存時に値を暗号化し、Eloquentモデルでアクセスする時には自動的にその属性を復元するように設定できます。Accessors and mutators allow you to format Eloquent attribute values when you retrieve or set them on model instances. For example, you may want to use the Laravel encrypter[/docs/{{version}}/encryption] to encrypt a value while it is stored in t
はじめにEagerload を使うと SQL クエリがごっそり減って気持ちいいですよね。 ただ、少し複雑な制約が入るとあれどうするんだっけ?ということがよくあったので、使用方法などを改めてまとめることにしました。 hasMany とは?といったリレーションの基本については説明していません。 Laravel5.5 で検証しています。 Eagerload の前にリレーションはなにを返すかを知る公式サイトにものっている次のような User モデルと posts という 1 対多のリレーションメソッドがあったとします。 <?php namespace App; use Illuminate\Database\Eloquent\Model; class User extends Model { /** * ユーザーの全ポストの取得 */ public function posts() { retur
【第4回】Composerを使ってお手軽アプリケーション開発 本連載ではComposerで公開されているパッケージの中から、フレームワークを問わず汎用的に使えるライブラリをサンプルコードと共に紹介します。 今回はDBを扱う「Eloquent(Illuminate/Database)」というORMを紹介します。 ORMとEloquent ORMとは? ORMは「Object Relational Mapping (オブジェクト関係マッピング)」と呼ばれている、オプジェクト指向で書かれているプログラムから、オブジェクト指向ではないデータベースなどのデータをオプジェクト指向のように扱う手法のことを言います。 かみ砕いて説明すると、データベースをオブジェクト指向っぽく扱うためのクラス構造ということです。 例えば、 SELECT 'id', 'name', 'age' FROM users WHER
イントロダクションIntroduction Eloquent ORMはLaravelに含まれている、美しくシンプルなアクティブレコードによるデーター操作の実装です。それぞれのデータベーステーブルは関連する「モデル」と結びついています。モデルによりテーブル中のデータをクエリできますし、さらに新しいレコードを追加することもできます。The Eloquent ORM included with Laravel provides a beautiful, simple ActiveRecord implementation for working with your database. Each database table has a corresponding "Model" which is used to interact with that table. Models allow you
イントロダクションIntroduction Eloquent ORMはLaravelに含まれている、美しくシンプルなアクティブレコードによるデーター操作の実装です。それぞれのデータベーステーブルは関連する「モデル」と結びついています。モデルによりテーブル中のデータをクエリできますし、さらに新しいレコードを追加することもできます。The Eloquent ORM included with Laravel provides a beautiful, simple ActiveRecord implementation for working with your database. Each database table has a corresponding "Model" which is used to interact with that table. Models allow you
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く