使用thinkphp 关联模型has_one插入数据问题:插入数据的时候只操作一张表为啥?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用thinkphp 关联模型has_one插入数据问题:插入数据的时候只操作一张表为啥?相关的知识,希望对你有一定的参考价值。
使用thinkphp 关联模型has_one插入数据问题:插入数据的时候只操作一张表?附加表关联主表的外键是 sid;具体内容主表
附加表
代码如下:1.sellerModel.class.php<?phpclass sellerModel extends RelationModel protected $_validate = array( array('username', 'require', '%username_require'), //不能为空 array('username', '1,20', '%username_length_error', 0, 'length', 1), //用户名长度 array('password', '6,20', '%password_length_error', 0, 'length', 1), //密码长度 ); protected $_link=array( 'seller_other'=> array( 'mapping_type'=>HAS_ONE, //'class_name'=>'seller_other', //'mapping_name'=>'sother', //外键 'foreign_key'=>'id', ), );?>2.sellerAction.class.php 文件<?phpclass sellerAction extends Action public function add() if($this->isPost()) $res = $this->_mod->relation(true)->add($_POST); var_dump($res); $this->display(); ?>调试最终执行的sql语句是 只操作seller这种数据表。
哪里不对呢?关联模型不是我那样定义的吗?
追答两张表没有关联到一块,TP中的关联模型 不好搞懂,只要是对主键和外键要求很严格。一般情况下,主键和外键 的默认id为 表名_id 你可以把表中外键 id 字段 设置成 表名_id 试试
参考技术A 这是封装好的单表关联追问就是主表关联附加表,一对一模型插入数据操作,结果都插入主表了,附加表的都没有参与。为什么会这样呢?没用过关联模型,一直没搞定这种问题。。
追答这种情况,你做两次插入,别用关联模型,has_one还好理解点,has_many简直坑爹,不一定非要用TP的这个关联模型
参考技术B 同事添加了两条SQL语句,分别插入两个表里试试追问问题就出在,关联模型不插入附加表的数据,我用create方法,只能插入主表的数据,附加表的数据直接过滤了,只能手动再写一条插入附加表的操作。那这个关联模型就没有用了啊
has_one 与用户和客户的关联以及 Rails 视图表单
【中文标题】has_one 与用户和客户的关联以及 Rails 视图表单【英文标题】:has_one association with user and customer and rails view form 【发布时间】:2013-01-22 15:56:35 【问题描述】:我有一个 has_one 关联:
has_one 关联用户 -> 客户模型
用户将拥有 customer_id 还是客户将拥有 user_id 属性?
其他问题:在我的 _form 中,我想对所有未与客户关联的用户进行选择/选项,这是最好的方法吗?
非常感谢。
【问题讨论】:
【参考方案1】:_id 字段始终在具有belongs_to 的模型中,并引用其他表名。
class Customer < ActiveRecord::Base
belongs_to :user
end
class User < ActiveRecord::Base
has_one :customer
end
在这种情况下,customers 表将有一个 user_id 字段。
对于第二个问题,使用外连接在 SQL 中找到缺失值。 你想要的 SQL 是
select
from users
left outer join customers on users.id = customers.user_id
where customers.id is null
在 ActiveRecord 中,为您的 User 类添加一个范围。
在 Rails 3.x 中:
class User < ActiveRecord::Base
has_one :customer
scope :missing_customer,
includes(:customer).where("customers.id is null")
end
在 Rails 2.3.x 中:
class User < ActiveRecord::Base
named_scope :missing_customer,
:joins => "left outer join customers on users.id = customers.user_id",
:conditions => "customers.id is null"
end
【讨论】:
好的,谢谢,也许范围是相反的,我需要在我的客户表单视图中缺少用户,并且选择选项标签显示所有不在 user_id 字段中的客户表中的用户以上是关于使用thinkphp 关联模型has_one插入数据问题:插入数据的时候只操作一张表为啥?的主要内容,如果未能解决你的问题,请参考以下文章
thinkphp关联模型 condition关联条件怎么用,能说个例子吗
ThinkPHP模型中的HAS_ONE,BELONG_TO,HAS_MANY实践
如何在同一模型中进行 has_many 和 has_one 关联?
Rails validates_presence_of 并验证 has_one 关联模型中的存在