加入彼此不相关的表laravel

Posted

技术标签:

【中文标题】加入彼此不相关的表laravel【英文标题】:Joining table which are not related with one another laravel 【发布时间】:2018-05-15 07:58:53 【问题描述】:

只是想问一些关于加入表格的问题

我想知道是否可以将 2 个表连接在一起,即使它们彼此之间没有关系。这可能吗?如果是的话,你能给我一个例子来说明它是如何完成的。如果没有,是否有任何其他方式来加入或关联这两个表,即使它没有任何外键(例如:user_id)

我看到 sql 他们使用交叉连接之类的东西,但你也可以在 laravel 中这样做吗?

示例表示例:(假设我想让验证表 name_of_user 等于用户信息表的名称)

比如verification.name_of_user = user_information.name

验证用户信息表:

Schema::create(verifications, function (Blueprint $table) 
    $table->increments('id');
    $table->string('name_of_user'); 
    $table->timestamps();
);

用户信息表:

Schema::create(user_info, function (Blueprint $table) 
    $table->increments('id');
    $table->string('name); 
    $table->timestamps();
);

【问题讨论】:

【参考方案1】:

这些表是否间接相关?即,当您制作数据库图表时,这些表是否通过一个或多个其他表连接?如果是,那么您可以使用多个连接语句将它们连接在一起。

如果不是,在某些情况下,您可以将它们连接到相同的值上,即使它们不是外键。

编辑:是的,您可以在 name 属性上加入这两个表,但您必须使用 sql 查询而不是 eloquent。

SELECT v.*, u.* 
FROM verifications AS v
JOIN user_info AS u 
    ON u.name = v.name_of_user

警告: 即使有可能,我也不建议这样做,因为可能有多个具有相同名称/name_of_user 的条目。 相反,请创建一个用户表并将 verifys.name_of_user 替换为 verifys.user_id 并将 user_info.name 替换为 user_info.user_id。 然后您可以加入 user_id 并始终获得正确的加入结果。

Schema::create(users, function (Blueprint $table) 
    $table->increments('id');
    $table->string('name');
);

Schema::create(verifications, function (Blueprint $table) 
    $table->increments('id');
    $table->integer('user_id'); 
    $table->timestamps();
);

Schema::create(user_info, function (Blueprint $table) 
    $table->increments('id');
    $table->integer('user_id'); 
    $table->timestamps();
);

SELECT v.*, u.* 
FROM verifications AS v
JOIN user_info AS u 
    ON u.user_id = v.user_id

我已经有一段时间没有使用 laravel/eloquent 了,但我认为如果你设置正确,你现在甚至可以使用普通的 eloquent 方法来加入这些,因为 user_id 现在(如果设置正确)是一个外键并且因此这些表是相关的;)

【讨论】:

它们根本没有任何关系,没有关系,没有外键等,我想知道是否可以为这两个表做一个连接语句。如果可能的话,你能给我举个例子吗? 我现在明白您要求特定的桌子设计,而不仅仅是一个理论问题。在这种情况下,你能不能展示一下这两张表的结构? 在我更新我的问题并放入示例表时请稍等 对不起,我想我可能需要一些时间来想一个例子,我真的想不到 1 哈哈哈 所以..这是一个理论问题?【参考方案2】:

检查以下查询,

SELECT t1.Country,t2.* FROM table_1 as t1, table_2 as t2 where t1.id='1' and t2.id='2'

【讨论】:

如果我想从 table_1 和 table_2 中获取名称我想获取 Country 怎么办? 对于这部分,t1.id='1'和t2.id='2',为什么需要他们的id?我想如果他们不相关,为什么这里仍然涉及 id

以上是关于加入彼此不相关的表laravel的主要内容,如果未能解决你的问题,请参考以下文章

为啥这个 CSS 中的元素相互抵消(在不涉及继承但带有注释的 HTML 中)彼此不相关?

MySQL 加入 + “WHERE something=MAX(something)”

您可以从位于单个结果集中的两个单独的表中提取数据吗? [不加入问题]

Mysql如何通过'[id,anotherId]'格式加入相关表

LaravelLaravel的auth认证中间件的Api-token详细配置说明

加入自己与自己的表?