我忘记我已经传递了$weekends id,所以我做了这个公共函数。
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语句
$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();周末模型
<?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模型
<?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);
}
}发布于 2021-10-22 00:59:38
您正在寻找whereColumn()方法:https://laravel.com/docs/8.x/queries#additional-where-clauses (向下滚动一点)。现在,您正在搜索文字字符串weekends.id
SELECT * FROM `weekends` JOIN ... WHERE `weekend_team_members`.`weekends_id` = 'weekends.id'whereColumn()将确保您执行正确的SQL:
SELECT * FROM `weekends` JOIN ... WHERE `weekend_team_members`.`weekends_id` = `weekends`.`id`注意单引号和反引号的用法不同:
= 'weekends.id'
= `weekends`.`id`一个是字符串,一个是DB列,将产生不同的结果。
因此,您的最终查询将是:
$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')也是有效的)
发布于 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 (否则查询如何知道您正在查找哪个周末?)。
https://stackoverflow.com/questions/69670259
复制相似问题