当前位置: 首页 > 知识库问答 >
问题:

BelongToMany有许多Laravel SQL状态[42S22]

鲁羽
2023-03-14

我想做仓库(当然很简单)。我有3张桌子,因为它是:

存储表

class CreateStoresTable extends Migration
{

public function up()
{
    Schema::create('stores', function (Blueprint $table) {
        $table->increments('id');
        $table->string('name');
        $table->integer('user_id');
        $table->timestamps();
    });
}      

组表:

 public function up()
{
    Schema::create('groups', function (Blueprint $table) {
        $table->increments('id');
        $table->string('name');
        $table->string('visible');
        $table->timestamps();
    });
}

数据透视表group_store:

public function up()
{
    Schema::create('group_store', function(Blueprint $table) {
        $table->integer('group_id')->unsigned()->index();
        $table->foreign('group_id')->references('id')->on('groups')->onDelete('cascade');
        $table->integer('store_id')->unsigned()->index();
        $table->foreign('store_id')->references('id')->on('stores')->onDelete('cascade');
    });
}

门店型号-:

class Store extends Model
{
protected $table='stores';
protected $fillable = array('name','user_id');

public function group(){
    return $this->hasMany('App\Group');
}
}

群模型

class Group extends Model
{
protected $table='groups';
protected $fillable = array('name','visible');

public function store(){
    return $this->belongsToMany('App\Store');
}
}

当我在tinker中使用这个时

$group=App\Group::find(4)
$group->store()->get() // and is working as it should

但当我尝试反过来

$store=App\Store::first()
$store->group()->get() //i get this error message

消息'SQLSTATE[42S22]照亮\数据库\QueryExc0019:找不到列: 1054未知列'groups.store_id'在'where子句'(SQL:选择*从其中store_id=3和store_id不是null)'

我正在试图理解为什么eloquent在groups表中搜索store_id。。。

共有1个答案

楚承天
2023-03-14

使用数据透视表意味着您的关系是多对多的。根据Laravel文档,您的模型中的关系都应定义为belongtomany

class Store extends Model
{
    protected $table='stores';
    protected $fillable = array('name','user_id');

    public function group(){
        return $this->belongsToMany('App\Group');
    }
}

如果您不打算建立多对多关系,那么您的组应该只有一个存储,并且您的存储可以有多个组。这意味着您只需要在groups表上设置一个store\u id列。这就是雄辩目前所寻求的。

 类似资料:
  • 我们在其中一个模块中使用了Hystrix-断路器模式[library]。usecase是:-我们正在从kafka轮询16个消息,并使用pararllel流处理它们,因此,对于工作流中的每条消息,它需要3个rest调用,这些调用由hystric命令保护。现在,问题是当我尝试运行单个实例时,CPU显示尖峰,线程转储显示许多线程处于等待状态,等待所有3个命令。如下所示:-

  • 对于应用程序开发,我下载并安装了Flutter sdk及其依赖项Android studio、Java。安装完成后,我在检查< code>flutter doctor时出错。出现以下错误: 然后,在Flutter Android许可状态未知的帮助下进行搜索后,我尝试使用< code > PathToAndroidSDK-update 更新Android SDK,但它再次生成以下错误:

  • 帮助用户快速部署有状态的应用。 有状态应用即Statefulset。Statefulset的详细介绍内容,请参考kubernets官方文档-Statefulsets。 Pod是Kubernetes的最小编排单位,有状态statefulset主要用于部署实例之间有不对等关系,以及实例对外部数据有依赖关系的有状态应用。基于statefulset部署的应用有以下特点: 基于statefulset部署的p

  • 问题内容: 今天早上,我注意到我们的MySQL服务器负载越来越高。最大值应为8,但一度达到100以上。当我检查进程列表时,发现处于状态的大量更新查询(简单的查询,增加“ hitcounter”)。我们无法杀死他们(可以,但是可以将它们无限期地保留在州内),而我们的站点则停了下来。 重新启动服务时遇到了很多问题,不得不强行终止某些进程。当我们这样做时,我们能够使MySQLd重新启动,但是进程立即开始

  • Doctor摘要(要查看所有详细信息,请运行flutter doctor-v): []Flutter(Channel stable,V1.2.1,Linux上,locale en_us.utf-8) [!]Android工具链-为Android设备开发(Android SDK版本28.0.3)Android许可证状态未知。 []Android Studio(3.3版) [!]IntelliJ ID

  • 问题内容: [!] Android工具链-为Android设备开发(Android SDK 27.0.3) •Android SDK a .. \ Android \ sdk•未配置Android NDK位置(可选;对本机性能分析支持很有用)•平台android-27,构建工具27.0.3•Java二进制文件位于:C:\ Program Files \ Android \ Android Stud