首页 » 网站建设 » phpsql联系关系语句技巧_3分钟短文说说Laravel模型接洽关系关系最纯粹的一对一

phpsql联系关系语句技巧_3分钟短文说说Laravel模型接洽关系关系最纯粹的一对一

访客 2024-11-17 0

扫一扫用手机浏览

文章目录 [+]

以是,laravel模型供应了关联关系,本文就来梳理梳理那些用法。

代码韶光

我们不要PPT似的念稿子,罗列出所有的关系模型,那样不直不雅观也不是高效学习的办法。
还是从示例触发,看看关联关系到底办理的是什么问题,以及如何利用。

phpsql联系关系语句技巧_3分钟短文说说Laravel模型接洽关系关系最纯粹的一对一

首先是数据库的准备,假设有如下两个表的字段对应关系:

phpsql联系关系语句技巧_3分钟短文说说Laravel模型接洽关系关系最纯粹的一对一
(图片来自网络侵删)

利用命令行创建一个Profile模型,并同时创建迁移文件:

php artisan make:model Profile --migration

来看天生的 app/Profile.php 文件的内容:

namespace App;use Illuminate\Database\Eloquent\Model;class Profile extends Model {}

由于利用了 --migration 选项,laravel自动天生了 database/migrations/2020_10_11_015236_create_profiles_table.php 文件, 用于天生对应的数据库 profiles 表。

还是老规矩,先实现数据库迁移利用的 up 方法:

public function up(){ Schema::create('profiles', function(Blueprint $table) { $table->increments('id'); $table->integer('user_id')->unsigned(); $table->foreign('user_id')->references('id')->on('users'); $table->string('url'); $table->string('telephone'); $table->timestamps(); });}

用于回滚的方法就不列出来了,仅仅是表的删除。
下面手动实行迁移指令:

php artisan migrate

输出内容如下:

Migrated: 2020_10_11_015236_create_profiles_table.php关联关系

统统准备就绪,我们开始利用关联关系来处理数据的同等性。
一个user对应一个profile,以是这是一对一的关系, 在User模型里添加如下声明:

class User extends Model { public function profile() { return $this->hasOne('App\Profile'); }}

一旦定义了上述方法,就可以这样链式调用了:

$user = User::find(1)->profile->telephone;

我们拆解开做阐明。
首先利用 User::find($id) 返回的是一个 User 模型工具的实例。
该实例有一个 profile 方法,便是上面这段关系声明。

调用 profile 返回的是一个 Profile 工具的实例,以是可以连续调用Profile的属性,也便是 telephone 的由来了。

须要特殊把稳的是,类似下面的写法,返回结果是不同的:

$user = User::find($id);$user->profile; // 返回 Profile 工具$user->profile(); // 返回 hasOne 关联关系工具

大家在利用的时候,一定不要迷惑,要分清楚利用方法。

有了关联查询,自然就有关联更新,用法如下:

$profile = new Profile;$profile->telephone = '12345678';$user = User::find(1);$user->profile()->save($profile);

有了关联更新这种写操作,自然就有了关联删除,模型方法的调用而已:

$user = User::find($id);$user->profile()->delete();

由于是严格一对一的关系,也便是一个user只有一个profile,如果某个user被删除了, 就会剩下一个孤零零的profile无所寄托。

除了在程序高下文的同等性担保外,还可以利用数据库的外键,在删除user时将profile关联删除。
那么只要修正迁移文件, 并添加如下内容:

$table->integer('user_id')->unsigned();$table->foreign('user_id')->references('id')->on('users')->onDelete('cascade');

写在末了

本文先容了laravel模型关联的最大略的“一对一”,我们从程序角度和数据库角度讲解了 如何在删除资源时的同等性删除。
更繁芜的关系,在编程层面是故意义的,我们下一章先容更多的关联关系。

Happy coding :-)

我是@程序员小助手,专注编程知识,圈子动态的IT领域原创作者

标签:

相关文章

今日头条算法如何打造个化推荐系统

信息爆炸的时代已经到来。人们每天都要面对海量的信息,如何在海量信息中找到自己感兴趣的内容,成为了许多人关注的焦点。今日头条作为一款...

网站建设 2025-01-31 阅读1 评论0