首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >除非硬编码ID,否则连接表不起作用

除非硬编码ID,否则连接表不起作用
EN

Stack Overflow用户
提问于 2021-10-22 00:50:24
回答 2查看 23关注 0票数 0

我忘记我已经传递了$weekends id,所以我做了这个公共函数。

代码语言:javascript
复制
show(Weekend $weekend) 
    {
        $id = $weekend->id; 
        $teams = DB::table('weekends')
        ->join('weekend_team_members', 'weekend_team_members.weekends_id', '=', 'weekends.id')
        ->select('weekend_team_members.firstname','weekend_team_members.lastname','weekend_team_members.position')
        ->where('weekend_team_members.weekends_id', $id)
        ->get();

        return view('pages.weekend')->with(['weekend' => $weekend,'teams'=> $teams]);
    }

这段代码只有在我将->where(‘weekend_team_->where,'=','weekends.id')更改为->where(’weekend_team_->where,'=',2)时才有效,否则它是一个空数组。我确信这可能是一些简单的东西,但是我想不出来。

下面是我的join语句

代码语言:javascript
复制
 $teams = DB::table('weekends')
    ->join('weekend_team_members', 'weekend_team_members.weekends_id', '=', 'weekends.id')
    ->select('weekend_team_members.firstname','weekend_team_members.lastname','weekend_team_members.position')
    ->where('weekend_team_members.weekends_id', '=','weekends.id')
    ->get();

周末模型

代码语言:javascript
复制
   <?php

namespace App\Models\Webmaster;

use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;

class Weekend extends Model
{
    use HasFactory;
    
    protected $fillable = ['title','verse','songtitle','songvideo','image'];

    public function weekendTeamMembers() {
        return $this->hasMany(App\Models\Webmaster\WeekendTeamMember::class);
    }

 

}

WeekendTeamMember模型

代码语言:javascript
复制
<?php

namespace App\Models\Webmaster;

use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;

class WeekendTeamMember extends Model
{
    use HasFactory;
    protected $fillable = ['firstname','lastname','position'];

    public function weekend() {
        return $this->belongsTo(App\Models\Webmaster\Weekend::class);
    }
}
EN

回答 2

Stack Overflow用户

发布于 2021-10-22 00:59:38

您正在寻找whereColumn()方法:https://laravel.com/docs/8.x/queries#additional-where-clauses (向下滚动一点)。现在,您正在搜索文字字符串weekends.id

代码语言:javascript
复制
SELECT * FROM `weekends` JOIN ... WHERE `weekend_team_members`.`weekends_id` = 'weekends.id'

whereColumn()将确保您执行正确的SQL:

代码语言:javascript
复制
SELECT * FROM `weekends` JOIN ... WHERE `weekend_team_members`.`weekends_id` = `weekends`.`id`

注意单引号和反引号的用法不同:

代码语言:javascript
复制
= 'weekends.id'
= `weekends`.`id`

一个是字符串,一个是DB列,将产生不同的结果。

因此,您的最终查询将是:

代码语言:javascript
复制
$teams = DB::table('weekends')
->join('weekend_team_members', 'weekend_team_members.weekends_id', '=', 'weekends.id')
->select('weekend_team_members.firstname','weekend_team_members.lastname','weekend_team_members.position')
->whereColumn('weekend_team_members.weekends_id', 'weekends.id')
->get();

(注意:=是隐含的,是可选的,但->whereColumn('weekend_team_members.weekends_id', '=', 'weekends.id')也是有效的)

票数 0
EN

Stack Overflow用户

发布于 2021-10-22 00:59:39

首先,在没有定义列的情况下,weekend_team_members.weekends_id不会在本地工作。Laravel希望它是weekend_id (单数)。

其次,where()子句不接受列名作为参数,即使接受,也不会做任何事情。您所描述的"where“已经由您的->join()方法完成(这就是内部连接)。

第三,连接的目的是什么?您仅从weekend_team_members表中选择列。

如果目的是过滤掉没有weekend_id的weekend_team_members,那么你只需要做一个->whereNotNull('weekend_id')。如果您想从weekends表中选择一些列,那么您已经能够从您创建的连接中选择一些列。

如果您正在查找属于特定周末的团队成员,则需要向其传递一个ID (否则查询如何知道您正在查找哪个周末?)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69670259

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档