Laravel雄辩的查询即使返回id

时间:2018-08-07 14:20:50

标签: laravel eloquent

我已经绞尽脑汁了好一阵子,我无法想出这种情况发生的原因。

基本上,我有一个充满订户列表名称的表,我需要为每个表的详细信息页面检索一个表。但是,无论我如何尝试检索数据,它总是返回表中的每一行。在此模型上,我有两个关系,因为订户列表有很多用户,并且可能还有很多组织。

这是我当前用来检索单个记录的查询:

$query = SubscriberList::with($loadRelations)->where('id', $subscriberListId)->firstOrFail();

这将返回所有行。

我也尝试过:

$query = SubscriberList::with($loadRelations)->findOrFail($subscriberListId);

具有相同的结果。

我的关系分别为usersorganisations,并在SubscriberList模型中设置如下:

public function users()
{
    return $this->hasManyThrough(User::class,SubscriberListsUsers::class,'user_id','id');
}

public function organisations()
{
    return $this->hasManyThrough(Organisation::class, SubscriberListsOrganisations::class,'organisation_id','id');
}

每个人都使用不同的数据透视表来容纳关系。

我不确定为什么要得到我要得到的结果-任何人都可以阐明这一点吗?我没有使用Eloquent很久了,所以我可能只是在这里错过了一些显而易见的东西。

编辑:

dd($query)的结果:

SubscriberList {#451
  #fillable: array:1 [
    0 => "name"
  ]
  #connection: "pgsql"
  #table: null
  #primaryKey: "id"
  #keyType: "int"
  +incrementing: true
  #with: []
  #withCount: []
  #perPage: 15
  +exists: true
  +wasRecentlyCreated: false
  #attributes: array:4 [
    "id" => 10
    "name" => "Michael"
    "created_at" => "2018-08-07 13:59:24"
    "updated_at" => "2018-08-07 13:59:24"
  ]
  #original: array:4 [
    "id" => 10
    "name" => "Michael"
    "created_at" => "2018-08-07 13:59:24"
    "updated_at" => "2018-08-07 13:59:24"
  ]
  #casts: []
  #dates: []
  #dateFormat: null
  #appends: []
  #events: []
  #observables: []
  #relations: array:2 [
    "users" => Collection {#440
      #items: []
    }
    "organisations" => Collection {#454
      #items: []
    }
  ]
  #touches: []
  +timestamps: true
  #hidden: []
  #visible: []
  #guarded: array:1 [
    0 => "*"
  ]
}

编辑:users和数据透视表的模式:

Schema::create('users', function (Blueprint $table) {
    $table->increments('id');
    $table->string('first_name');
    $table->string('last_name');
    $table->string('colour');
    $table->integer('organisation_id')->unsigned()->nullable();
    $table->string('requested_organisation')->nullable();
    $table->integer('sso_id')->nullable();
    $table->string('email')->unique();
    $table->string('job_title')->nullable();
    $table->string('telephone')->nullable();
    $table->boolean('confirmed')->default(false);
    $table->rememberToken();
    $table->timestamps();

    $table->foreign('organisation_id')
        ->references('id')
        ->on('organisations')
        ->onUpdate('cascade')
        ->onDelete('set null');
});

Schema::create('subscriber_lists_users', function(Blueprint $table) {
    $table->increments('id')->unsigned();
    $table->integer('subscriber_list_id');
    $table->integer('user_id');

    $table->foreign('subscriber_list_id')
        ->references('id')
        ->on('subscriber_lists')
        ->onUpdate('cascade')
        ->onDelete('cascade');

    $table->foreign('user_id')
        ->references('id')
        ->on('users')
        ->onUpdate('cascade')
        ->onDelete('cascade');
});

1 个答案:

答案 0 :(得分:0)

.css执行一个新查询,只返回$query->get()

$query使用错误的关系类型:

users