Laravel5 生徒成績管理システム-04-Eloquent Association
データテーブルは相互に関連していることがよくあります。たとえば、ブログ投稿に複数のコメントが含まれている場合や、注文が 1 人の注文顧客に対応している場合があります。 Eloquent では、これらの関係の管理と処理が簡単になり、複数のタイプの関係もサポートされます。
1 対 1#
1 対 1 の関係は、非常に基本的な関係です。たとえば、ユーザー モデルは電話に対応する場合があります。この関連付けを定義するには、Phone メソッドを User モデルに配置する必要があります。 Phone メソッドは、基本クラス Eloquent の hasOne メソッドの結果を返す必要があります:
<?phpnamespace App;use Illuminate\Database\Eloquent\Model;class User extends Model{ /** * 获取与指定用户互相关联的电话纪录。 */ public function phone() { return $this->hasOne('App\Phone'); }}
hasOne メソッドに渡される最初のパラメータは、関連付けられたモデルのクラス名です。アソシエーションを定義した後、Eloquent の動的プロパティを使用してアソシエーション レコードを取得できます。動的プロパティを使用すると、モデルで定義されたプロパティであるかのように関連付け関数にアクセスできます:
$phone = User::find(1)->phone;
Eloquent は、対応する関連付けの外部キー名がモデル名に基づいていると想定します。この例では、電話モデルに user_id 外部キーがあると自動的に想定されます。この規則をオーバーライドする場合は、2 番目のパラメーターを hasOne メソッドに渡すことができます。
うわーさらに、Eloquent のデフォルトの外部キーは、上位モデルの id フィールドに対応する値を持ちます。言い換えれば、Eloquent は、ユーザーの id フィールドが電話モデルの user_id フィールドと同じ値を持つレコードを検索します。関連付けで ID 以外の値を使用する場合は、3 番目のパラメーターを hasOne メソッドに渡してカスタム キーを指定できます:
return $this->hasOne('App\Phone', 'foreign_key');
公式ドキュメントを参照する
プロジェクトの実践:
Create Student成績テーブルの成績を取得し、ユーザー テーブル ID に関連付けられた外部キー user_id を確立します。
1 人のユーザーは 1 つの成績テーブルにのみ対応できるため、これは 1 対 1 のモデルであり、その後成績の関連付けを追加します。ユーザー モデル内で
return $this->hasOne('App\Phone', 'foreign_key', 'local_key');
ログイン ユーザーに従って、ログイン ユーザーのスコアを取得します (共同クエリ):
<?phpnamespace App;use Illuminate\Auth\Authenticatable;use Illuminate\Database\Eloquent\Model;use Illuminate\Auth\Passwords\CanResetPassword;use Illuminate\Foundation\Auth\Access\Authorizable;use Illuminate\Contracts\Auth\Authenticatable as AuthenticatableContract;use Illuminate\Contracts\Auth\Access\Authorizable as AuthorizableContract;use Illuminate\Contracts\Auth\CanResetPassword as CanResetPasswordContract;class UsersInfo extends Model implements AuthenticatableContract, AuthorizableContract, CanResetPasswordContract{ use Authenticatable, Authorizable, CanResetPassword; /** * The database table used by the model. * * @var string */ protected $table = 'users_info'; /** * The attributes that are mass assignable. * * @var array */ protected $fillable = ['name', 'email', 'is_admin', 'password','sex','phone','pro_class']; /** * The attributes excluded from the model's JSON form. * * @var array */ protected $hidden = ['password', 'remember_token']; /** * 登录验证规则 * @return [type] [description] */ protected static function rules() { return [ 'id' => 'required|digits:10', 'password' => 'required' ]; } /** * 建立一对一关系 */ public function grade() { return $this->hasOne('App\Grade'); }}
ただし、ここでエラーが報告されます:
なぜエラーが報告されるのでしょうか?
公式ドキュメントを分析してクエリした後、Eloquent は、対応する関連付けの外部キー名がモデル名に基づいていると想定します。この例では、Grade モデルに users_info_id 外部キーがあると自動的に想定されます。この規則をオーバーライドする場合は、2 番目のパラメーターを hasOne メソッドに渡すことができます。
/** * 返回学生主页 */public function home(){ $grade = Auth::user()->grade; return view('stu.home', compact('grade'));}
スコアを表示:
さらに、Eloquent のデフォルトの外部キーは、上位モデルの id フィールドに対応する値を持ちます。言い換えれば、Eloquent は、ユーザーの id フィールドが Grade モデルの user_id フィールドと同じ値を持つレコードを検索します。関連付けで id 以外の値を使用する場合は、カスタム キーを指定するために hasOne メソッドに 3 番目のパラメーターを渡します。

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック











多くの場合、キーワードと追跡パラメーターで散らかった長いURLは、訪問者を阻止できます。 URL短縮スクリプトはソリューションを提供し、ソーシャルメディアやその他のプラットフォームに最適な簡潔なリンクを作成します。 これらのスクリプトは、個々のWebサイトにとって価値があります

Laravelは、直感的なフラッシュメソッドを使用して、一時的なセッションデータの処理を簡素化します。これは、アプリケーション内に簡単なメッセージ、アラート、または通知を表示するのに最適です。 データは、デフォルトで次の要求のためにのみ持続します。 $リクエスト -

これは、LaravelバックエンドとのReactアプリケーションの構築に関するシリーズの2番目と最終部分です。シリーズの最初の部分では、基本的な製品上場アプリケーションのためにLaravelを使用してRESTFUL APIを作成しました。このチュートリアルでは、開発者になります

Laravelは簡潔なHTTP応答シミュレーション構文を提供し、HTTP相互作用テストを簡素化します。このアプローチは、テストシミュレーションをより直感的にしながら、コード冗長性を大幅に削減します。 基本的な実装は、さまざまな応答タイプのショートカットを提供します。 Illuminate \ support \ facades \ httpを使用します。 http :: fake([[ 'google.com' => 'hello world'、 'github.com' => ['foo' => 'bar']、 'forge.laravel.com' =>

PHPクライアントURL(CURL)拡張機能は、開発者にとって強力なツールであり、リモートサーバーやREST APIとのシームレスな対話を可能にします。尊敬されるマルチプロトコルファイル転送ライブラリであるLibcurlを活用することにより、PHP Curlは効率的なexecuを促進します

顧客の最も差し迫った問題にリアルタイムでインスタントソリューションを提供したいですか? ライブチャットを使用すると、顧客とのリアルタイムな会話を行い、すぐに問題を解決できます。それはあなたがあなたのカスタムにより速いサービスを提供することを可能にします

2025 PHP Landscape Surveyは、現在のPHP開発動向を調査しています。 開発者や企業に洞察を提供することを目的とした、フレームワークの使用、展開方法、および課題を調査します。 この調査では、現代のPHP Versioの成長が予想されています

この記事では、Laravel Webフレームワークの通知システムを検討します。 Laravelの通知システムを使用すると、さまざまなチャネルでユーザーに通知を送信できます。今日は、通知ovを送信する方法について説明します
