连接表与彼此不相关的laravel

时间:2017-12-01 08:44:29

标签: php mysql laravel join orm

只想问一些与加入表有关的问题

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

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

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

类似于verify.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();
});

2 个答案:

答案 0 :(得分:2)

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

如果没有,在某些情况下您可以将它们加入相同的值,即使它们不是外键。

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

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

警告
即使可能,我也不推荐它,因为可能有多个具有相同名称/ name_of_user的条目。
而是创建一个用户表,并将verifications.name_of_user替换为带有user_info.user_id的verifications.user_id和user_info.name。
然后,您可以加入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,但我认为如果你设置正确,你现在甚至可以使用普通的雄辩方法来加入这些,因为user_id现在(如果设置正确)是一个外键和因此表格是相关的;)

答案 1 :(得分:0)

检查以下查询,

    public class MemberFragment extends Fragment {
    private ListView studentListView;
            public static MemberFragment newInstance() {
                MemberFragment fragment = new MemberFragment();
                return fragment;
            }
            TextView textViewNamaHolder;
            @Override
            public void onCreate(Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);
            }

            @Override
            public View onCreateView(LayoutInflater inflater, ViewGroup container,
                                     Bundle savedInstanceState) {
                View v = inflater.inflate(R.layout.fragment_member, container, false);

                studentListView = (ListView) v.findViewById(R.id.yourListView);
                getActivity().setTitle("Daftar Member");
                setHasOptionsMenu(true);
                //PegawaiActivity a = new PegawaiActivity();
        PegawaiActivity.GetHttpResponse mm = a.new 
        GetHttpResponse(getActivity());
        mm.setListView(studentListView );
        mm.execute();
        //Adding ListView Item click Listener.

                return v;
            }

        }