我正试图在Laravel中获得两个相关的对象,按照文档要求使用渴望加载。
https://laravel.com/docs/5.4/eloquent-relationships#eager-loading
我的模型是:
class Lead extends Model {
public function session() {
return $this->hasOne('App\LeadSession');
}
}
class LeadSession extends Model {
public function lead() {
return $this->belongsTo('App\Lead');
}
}
我想用一个SQL查询获取两个对象。基本上我想执行:
select * from lead_sessions as s
inner join lead as l
on l.id = s.lead_id
where s.token = '$token';
然后能够访问LeadSession和Lead对象。以下是我正在尝试的php代码:
$lead = Lead::with(['session' => function ($q) use ($token) {
$q->where('token','=',$token);
}])->firstOrFail();
print($lead->session->id);
我也尝试过:
$lead = Lead::whereHas('session', function($q) use ($token) {
$q->where('token','=',$token);
})->firstOrFail();
print($lead->session->id);
和
$session = LeadSession::with('lead')->where('token',$token)->firstOrFail();
print($session->lead->id);
在这三种情况下,我都会执行两个查询,一个用于leads
表,另一个用于lead\u sessions
表。
这样的事情在雄辩中可能发生吗?在我看来,这应该是一个标准的ORM操作,但出于某种原因,我花了一整天的时间来处理它。
我不想使用查询生成器,因为我想在以后使用雄辩的对象及其函数。
我来自Python和Django,我想在Django中复制select_related
函数的行为。
试试这个,看看它是否进行了多个查询
$session = LeadSession::join('leads', 'leads.id', '=', 'lead_sessions.lead_id')
->where('token',$token)
->firstOrFail();
我希望它只运行一个查询。我没有测试这个。不确定是否必须添加select()
来拾取列。但是,是的,先试试这个。
更新只需添加如何使用会话和潜在客户数据。尝试选择并指定所需的数据。原因是如果两个表都有类似的列,如'id',其中一个将被覆盖。所以你必须化名你的选择喜欢
$session = LeadSession::join('leads', 'leads.id', '=', 'lead_sessions.lead_id')
->where('token',$token)
->select(
'lead_sessions.*',
'leads.id as lead_id',
'leads.name',
'leads.more_stuff'
)
->firstOrFail();
现在所有这些数据都属于$session
变量。因为你在做测试
print($lead->session->id);
//becomes
print($session->lead_id); //we aliased this in the query
问题内容: 我正在尝试创建一个报告页面,以显示从特定日期到特定日期的报告。这是我当前的代码: 这在普通SQL中的作用是。 我在这里有此查询,但我不知道如何将其转换为雄辩的查询。 如何将上面的代码转换为雄辩的查询?先感谢您。 问题答案: 该方法验证列的值是否在两个值之间。 在某些情况下,您需要动态添加日期范围。根据@Anovative的评论,您可以执行以下操作: 如果您想添加更多条件,则可以使用。如
问题内容: 使用Laravel 4,我有以下模型和关系:具有多记录的事件具有多项目的事件。我想做的是这样的 原因是无效的,因为Eloquent在检索记录时不会将模型联接在一起。因此,如何在不自己编写SQL的情况下解决这个问题(我想避免使用分页,但要避免这种情况)。 问题答案: 您想要的是渴望加载。 如果要指定其他约束,它的工作原理如下:
我正在尝试创建一个报告页面,显示从特定日期到特定日期的报告。以下是我当前的代码: 这在普通SQL中的作用是。 我在这里有这个查询,但我不知道如何将其转换为雄辩的查询。 如何将上面的代码转换为雄辩的查询?提前谢谢你。
问题内容: 我有两个表A和Band,A与B之间的关系是A —>一对多—> B 通常,对于A的每条记录,我都有一个B的记录。 我正在尝试编写一个查询,该查询将为我提供A的 唯一 记录列表,其中B中的 记录 超过 一个(多个) 。 我很困惑,因为我只完成了基本的sql查询,而这对我来说似乎很复杂。 可以请一个人指导我正确答案或给我解决方案。 编辑: 好吧,我尝试了下面的事情,它给了我一个错误 从A a
我有两个查询,它们都是分开工作的,但是当我尝试统一下摆时,我只有问题。 查询1: 查询 2: 如何根据(内部一)统一它们?
在SQL Server中,我有两个来自两个表的查询。 第一个表“Values1”有两列:“index1”和“value1”。第二个表“Values2”有“index2”和“value2”列。 我想要一个查询,对于一对索引值“d1”和“d2”,可以输出所有“index1”和“value e1”行,其中对应的index1在“d1”和“d2”之间,以及“Values2”表中具有“index2”值在“d1