Laravel要求 users_id而不是user_id 我有两个表用户(id,name,email ..)和Country(id, user_id ,country ..)。
用户模型
{% extends "base.html" %}
<script>
{% block jquery %}
function setPrice(){
var price = $(".variation_select option:selected").attr("data-price")
var sale_price = $(".variation_select option:selected").attr("data-sale-price")
if (sale_price != "" && sale_price != "None" && sale_price != null ) {
$("#price").html("<h4>" + sale_price + " <small class='og-price'>" + price + "</small></h4>");
} else {
$("#price").html(price);
}
}
setPrice()
$(".variation_select").change(function(){
setPrice()
})
{% endblock %}
</script>
{% block content %}
<div class="row">
{% for object in object_list %}
<div class="col-sm-6 col-md-4">
{% if object.productimage_set.count > 0 %}
{% for img in object.productimage_set.all %}
<div class="thumbnail">
<img class='img-responsive' src="{{ img.image.url }}" >
{% endfor %}
{% endif %}
<div class="caption">
<h3>{{ object.title }}</h3>
<form id='add-form' method='GET' action="{% url 'cart' %}">
<p id='jquery-message' class='lead'></p>
{% if object.variation_set.count > 1 %}
<h4 id='price'>{{ object.variation_set.first.price }}</h4>
<select name= 'item' class='form-control variation_select'>
{% for vari_obj in object.variation_set.all %}
<option data-sale-price="{{vari_obj.sale_price}}" data-price="{{ vari_obj.price }}" value="{{ vari_obj.id }}">{{ vari_obj }}</option>
{% endfor %}
</select>
{% else %}
<input type="hidden" name='item' value='{{ object.variation_set.first.id }}' />
<h4 id="price">{% if object.variation_set.first.sale_price %}
{{ object.variation_set.first.sale_price }}
<small class="og-price">{{ object.variation_set.first.price }}</small>
{% else %}
{{ object.variation_set.first.price }}
{% endif %}
</h4>
{% endif %}
<p>{{object.description}}</p>
<input class='form-control' type='number' name='qty' value='1' />
<br></br>
<p><input id='submit-btn' type='submit' value='Add to Cart' class="btn btn-primary" />
</p>
</form>
</div>
</div>
</div>
{% endfor %}
</div>
{% endblock %}
国家模式
public function countries(){
return $this->hasOne('App\User');
}
控制器
public function users(){
return $this->belongsTo('App\User');
}
错误
$user = $user = User::find(1);
$country = new Country();
$country->country = 'TN';
$country->users()->associate($user);
$country->save();
我很困惑,我不知道我是对还是错。有人可以解释一下为什么要求用户 s _id。
答案 0 :(得分:0)
将关系名称更改为user()
:
public function user()
{
return $this->belongsTo('App\User');
}
答案 1 :(得分:0)
我认为这是一个概念问题。如果这是正常情况并且您尝试添加用户,则每个用户都有一个国家/地区,并且您希望具有反向关系,以便您可以列出某个国家/地区的所有用户。
如果是这样,你需要在country_id
表中添加外键users
而不是在countries表中添加users_id
,因此关系应定义如下:
public function country(){
return $this->belongsTo('App\Country');
}
并在国家/地区模型中
public function users(){
return $this->hasMany('App\User');
}
考虑关系的基本角色是:
乡村的hasMany-用户
用户hasOne国
所以关系应该是one-to-many
,因此必须有一个外键(在我们的例子中是国家)在许多表中(这里的用户表)。
答案 2 :(得分:0)
我遇到了同样的问题,对我来说似乎是个错误。
我有一个带有“ user_id”字段的表“ company”。
这两个成员函数返回不同的结果:
public function owner() { return $this->belongsTo('App\User'); }
public function user() { return $this->belongsTo('App\User'); }
为了使其正常工作,我需要指定第二个参数。这对我来说是非常违反直觉的。
public function owner() { return $this->belongsTo('App\User', 'user_id'); }
public function user() { return $this->belongsTo('App\User'); }
显然,这是预期的行为,因为'belongsTo'方法使用父函数的名称来确定键。在我看来,这很疯狂,我希望模型名称能够确定密钥。