Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/laravel/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Laravel 5数据库表关系_Laravel_Laravel 5 - Fatal编程技术网

Laravel 5数据库表关系

Laravel 5数据库表关系,laravel,laravel-5,Laravel,Laravel 5,我从学习Laravel 5中的数据库表关系开始。作为一个酒鬼,有些东西只是起到了一点不同的作用。我的第一个测试是 包含不同sql\u类型的表: class ElementFieldType extends Model { protected $fillable = ['name', 'sql_type']; } 包含链接到ElementFieldType模型中sql类型的字段的表(element\u field\u type\u id是外键): 在我的控制器中,在找到Element

我从学习Laravel 5中的数据库表关系开始。作为一个酒鬼,有些东西只是起到了一点不同的作用。我的第一个测试是

包含不同sql\u类型的表:

class ElementFieldType extends Model {

    protected $fillable = ['name', 'sql_type'];

}
包含链接到ElementFieldType模型中sql类型的字段的表(element\u field\u type\u id是外键):

在我的控制器中,在找到ElementField后,我想使用以下方式访问sql_类型:

$field = ElementField::find($id);
echo $field->type->sql_type;
但我得到了下面的错误,这意味着我可以告诉你们,在ElementFieldType中应该有一个element\u field\u id键,但这不可能是正确的

我做错了什么

SQLSTATE[42S22]: Column not found: 1054 Unknown column 'element_field_types.element_field_id' 
in 'where clause' (SQL: select `sql_type` from `element_field_types` 
where `element_field_types`.`element_field_id` = 1 and `element_field_types`.`element_field_id` 
is not null limit 1)
数据库转储:

CREATE TABLE `element_fields` (
  `id` int(10) UNSIGNED NOT NULL,
  `element_field_type_id` int(10) UNSIGNED NOT NULL,
  `api` varchar(255) NOT NULL,
  `label` varchar(255) NOT NULL,
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

CREATE TABLE `element_field_types` (
  `id` int(10) UNSIGNED NOT NULL,
  `name` varchar(255) NOT NULL,
  `sql_type` varchar(255) NOT NULL,
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

ALTER TABLE `element_fields`
  ADD PRIMARY KEY (`id`),
  ADD KEY `element_fields_element_field_type_id_foreign` (`element_field_type_id`),
  ADD KEY `element_fields_element_field_type_id_index` (`element_field_type_id`);

ALTER TABLE `element_field_types`
  ADD PRIMARY KEY (`id`);

ALTER TABLE `element_fields`
  ADD CONSTRAINT `element_fields_element_field_type_id_foreign` FOREIGN KEY (`element_field_type_id`) REFERENCES `element_field_types` (`id`);

您应该将外键传递给关系。尝试在模型中更改您的关系,如以下所示:

public function type() {
    return $this->hasOne('App\Models\ElementField', 'element_field_type_id');
}

您可以在此处阅读更多信息

您查询的内容没有任何链接。在第一个表中,您需要在
ElementFieldType
中引用
ElementField
,因为以下内容没有任何链接

因此,请尝试将id字段关系添加到
ElementFieldType
表中:

  element_fields_id
因此,打电话时:

  public function type() {
    return $this->hasOne('App\Models\ElementFieldType');
}
它现在有一个钩子来调用
ElementFieldType
表。这样做的目的是获取当前表名并向其添加id,因此它将查找字段:
element\u fields\u id

因此,模式应该是:

   CREATE TABLE `element_field_types` (
     `id` int(10) UNSIGNED NOT NULL,
     `element_fields_id` int(10) unsigned NOT NULL,
     `name` varchar(255) NOT NULL,
     `sql_type` varchar(255) NOT NULL,
     ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
所以现在调用
echo$field->type->sql\u type
它将在
元素字段类型
表中查找名为
元素字段类型
的字段,希望这是有意义的


基本上你不需要
element\u field\u types\u id
在另一个选项卡中,只需要
element\u fields\u id
字段在另一个选项卡中。

我需要使用
belongsTo
而不是
hasOne
来获得我想要的功能:

class ElementField extends Model {

    protected $fillable = ['api', 'element_field_type_id', 'element_id', 'label', 'explanation', 'type', 'mandatory'];

    public function type() {
        return $this->belongsTo('App\Models\ElementFieldType', 'element_field_type_id');
    }

}

现在使用
$field->type->sql\u type
我得到了我想要的东西

我以前尝试过,但是得到了这个错误
SQLSTATE[42S22]:Column not found:1054未知列'element\u field\u types.element\u field\u type\u id'在'where子句'(SQL:select*from
element\u field\u types`其中
element\u field\u types
element\u field\u type\u id
=1和
element\u field\u types
element\u field\u type\u id不为空限制1)`你能发布你的数据库模式吗?将它添加到问题中。Thanx提前,你可能需要将你的关系移动到ElementField。看看我的答案。另外,你不需要在受保护的$Fillable中使用外键'element\u field\u type\u id'。事实是,FieldType与categories类似,FieldType与products类似。因此,产品属于c分类和类别有很多产品。你是说,当我在产品级别时,我无法通过此链接获取类别信息?我必须进行两个单独的查询才能获取字段类型信息?问题是,字段类型的行为类似于类别,字段类似于产品。因此,产品属于类别,类别有很多产品cts。您的意思是,当我处于产品级别时,我无法通过此链接获取类别信息?我必须进行两次单独的查询才能获取字段类型信息?您自己就解决了这个问题,这样做总是很好:-)
class ElementField extends Model {

    protected $fillable = ['api', 'element_field_type_id', 'element_id', 'label', 'explanation', 'type', 'mandatory'];

    public function type() {
        return $this->belongsTo('App\Models\ElementFieldType', 'element_field_type_id');
    }

}