基于laravel belongsTo使用详解

前提:订单表(order)和用户表(user)

表结构:

order

CREATE TABLE `order` (
`id` char(16) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '' COMMENT '订单号',
`user_id` bigint(20) NOT NULL DEFAULT '0' COMMENT '用户id',
UNIQUE KEY `id` (`id`),
 KEY `user_id` (`user_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='订单表';

user

CREATE TABLE `user` (
`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '用户id',
PRIMARY KEY (`id`),
`username` varchar(32) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '' COMMENT '姓名',
 `password` char(60) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '' COMMENT '密码',
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=10009866 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='用户表'

**表关系:**user->order :一对多

需求:在查看订单详情时显示下单用户

实现:

1、当order表中外键为user_id user表主键为id时

public function user()
{
  return $this->belongsTo('Models\User');
}

2、当order表中外键为user_id user表主键为uid

public function user()
{
  return $this->belongsTo('Models\User', 'user_id', 'uid');
}

返回结果:

{
 "id": 17021423166486,
 "user_id": 10000003,
 "user": {
  "id": 10000003,
  "username": "",
 }
}

以上这篇基于laravel belongsTo使用详解就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我们。

时间: 2019-10-16

浅谈laravel5.5 belongsToMany自身的正确用法

场景 用户之间相互关注,记录这种关系的是followers表(follower_id 发起关注的人 followed_id被关注的人) 现在的多对多的关系就不再是传统的三张表的关系了, 这种情况 多对多关系应该怎么声明呢? 分析 laravel或者其他框架多对多的关系 一般都是由Model1 Model2 Model1_Model2(声明两者关系的表)来组成, 但是上面的场景 却是只有两张表,这时候就要研究下官方文档了; 当然是支持的 参考资料 https://laravel.com/docs/

浅谈#ifndef,#define,#endif的作用和用法

问题:ifndef/define/endif"主要目的是防止头文件的重复包含和编译 ======================================================== 用法: .h文件,如下: #ifndef XX_H #define XX_H ... #endif 这样如果有两个地方都包含这个头文件,就不会出现两次包含的情况 .. 因为在第二次包含时 XX_H 已经有定义了,所以就不再 include了 ------------------------------

浅谈Linux中ldconfig和ldd的用法

ldd 查看程序依赖库 ldd 作用:用来查看程式运行所需的共享库,常用来解决程式因缺少某个库文件而不能运行的一些问题. 示例:查看test程序运行所依赖的库: /opt/app/todeav1/test$ldd test libstdc++.so.6 => /usr/lib64/libstdc++.so.6 (0x00000039a7e00000) libm.so.6 => /lib64/libm.so.6 (0x0000003996400000) libgcc_s.so.1 => /

浅谈java中==以及equals方法的用法

equals 方法是 java.lang.Object 类的方法. 有两种用法说明: (1)对于字符串变量来说,使用"=="和"equals()"方法比较字符串时,其比较方法不同. "=="比较两个变量本身的值,即两个对象在内存中的首地址. "equals()"比较字符串中所包含的内容是否相同. 比如: String s1,s2,s3 = "abc", s4 ="abc" ; s1 =

浅谈tensorflow中几个随机函数的用法

如下所示: tf.constant(value, dtype=None, shape=None) 创建一个常量tensor,按照给出value来赋值,可以用shape来指定其形状.value可以是一个数,也可以是一个list. 如果是一个数,那么这个常亮中所有值的按该数来赋值. tf.random_normal(shape,mean=0.0,stddev=1.0,dtype=tf.float32) tf.truncated_normal(shape, mean=0.0, stddev=1.0,

浅谈Python中threading join和setDaemon用法及区别说明

Python多线程编程时,经常会用到join()和setDaemon()方法,今天特地研究了一下两者的区别. 1.join ()方法:主线程A中,创建了子线程B,并且在主线程A中调用了B.join(),那么,主线程A会在调用的地方等待,直到子线程B完成操作后,才可以接着往下执行,那么在调用这个线程时可以使用被调用线程的join方法. 原型:join([timeout]) 里面的参数时可选的,代表线程运行的最大时间,即如果超过这个时间,不管这个此线程有没有执行完毕都会被回收,然后主线程或函数都会接

浅谈spring中isolation和propagation的用法

可以在XML文件中进行配置,下面的代码是个示意代码 <tx:advice id="txAdvice" transaction-manager="txManager"> <tx:attributes> <tx:method name="add*" propagation="REQUIRED" isolation="READ_COMMITTED"/>增加记录的方法 <t

浅谈C++中virtual的三种用法

virtual用法一 #include using namespace std; class A{ public: virtual void display(){ cout<<"A"<<ENDL; } }; class B : public A{ public: void display(){ cout<<"B"<<ENDL; } }; void doDisplay(A *p) { p->display(); d

浅谈keras中的keras.utils.to_categorical用法

如下所示: to_categorical(y, num_classes=None, dtype='float32') 将整型标签转为onehot.y为int数组,num_classes为标签类别总数,大于max(y)(标签从0开始的). 返回:如果num_classes=None,返回len(y) * [max(y)+1](维度,m*n表示m行n列矩阵,下同),否则为len(y) * num_classes.说出来显得复杂,请看下面实例. import keras ohl=keras.utils

浅谈java中BigDecimal类的简单用法

一.BigDecimal概述 ​ Java在java.math包中提供的API类BigDecimal,用来对超过16位有效位的数进行精确的运算.双精度浮点型变量double可以处理16位有效数,但在实际应用中,可能需要对更大或者更小的数进行运算和处理.一般情况下,对于那些不需要准确计算精度的数字,我们可以直接使用Float和Double处理,但是Double.valueOf(String) 和Float.valueOf(String)会丢失精度.所以开发中,如果我们需要精确计算的结果,则必须使用