你好我得到这个错误Illuminate \ Database \ QueryException和消息'SQLSTATE[42S22]: Column not found: 1054 Unknown column 'posts.user_id' in 'where clause' (SQL: select * from
帖where
个帖子.
user_id = 1 and
个帖子.
user_id is not null)'
而且我不知道为什么如果在我的数据库中我没有user_id,我有id_user ...
这是我的迁移表
<?php
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;
class CreateUsersTable extends Migration
{
public function up()
{
Schema::create('users', function (Blueprint $table) {
$table->increments('id');
$table->string('user')->unique();
$table->string('email')->unique();
$table->string('password', 60);
$table->string('img');
$table->rememberToken();
$table->timestamps();
});
}
public function down()
{
Schema::drop('users');
}
}
这是我的帖子迁移档案
<?php
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;
class AddPosts extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('posts', function (Blueprint $table) {
$table->increments('id');
$table->string('nombre');
$table->longText('contenido');
$table->unsignedInteger('id_user');
$table->timestamps();
});
Schema::table('posts', function($table) {
$table->foreign('id_user')->references('id')->on('users');
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::drop('posts');
}
}
这是我的帖子模型
<?php
namespace NacionGrita;
use Illuminate\Database\Eloquent\Model;
class Post extends Model
{
protected $table = "posts";
protected $fillable = ['nombre', 'contenido', 'id_user'];
public function imagenes() {
return $this->belongsToMany('NacionGrita\Imagen');
}
public function categorias() {
return $this->belongsToMany('NacionGrita\Categoria');
}
public function tags() {
return $this->belongsToMany('NacionGrita\Tag');
}
public function user() {
return $this->belongsTo('NacionGrita\User');
}
}
这是我的用户模型
<?php
namespace NacionGrita;
use Illuminate\Foundation\Auth\User as Authenticatable;
class User extends Model
{
protected $table = "users";
protected $fillable = [
'user', 'email', 'password', 'img'
];
public function posts() {
return $this->hasMany('NacionGrita\Post');
}
protected $hidden = [
'password', 'remember_token',
];
}
如果我将我的“posts”表列从id_user更改为user_id它可以工作,但我不知道为什么我必须更改列名如果它应该有效,因为我指定了foreigns键或我做错了什么? / p>
感谢您的帮助
答案 0 :(得分:6)
为了指定外键,您需要在定义关系时在模型中执行此操作。
来自belongsTo
关系的文档:
在上面的示例中,Eloquent会尝试将
user_id
模型中的Phone
与id
模型上的User
进行匹配。 Eloquent通过检查关系方法的名称并使用_id
为方法名称添加后缀来确定默认外键名称。但是,如果Phone
模型上的外键不是user_id
,您可以将自定义键名作为第二个参数传递给belongsTo
方法
换句话说,在定义与User的关系的Post模型中,您需要添加第二个参数来指定外键名称:
public function user() {
return $this->belongsTo('NacionGrita\User', 'id_user');
}
来自hasOne
和hasMany
关系的文档:
Eloquent根据模型名称假定关系的外键。在这种情况下,自动假定
Phone
模型具有user_id
外键。如果要覆盖此约定,可以将第二个参数传递给hasOne
方法:
换句话说,在您定义与Post关系的User模型中,您需要再次添加指定外键名称的第二个参数:
public function posts() {
return $this->hasMany('NacionGrita\Post', 'id_user');
}