【问题标题】:Laravel Eloquent Select IssueLaravel Eloquent 选择问题
【发布时间】:2015-02-23 04:49:44
【问题描述】:

这是我的查询

$TagDatas = TagModel::whereIn('TagId', array($BlogData->Tagged))->get();

$BlogData->Tagged 的值为 1,2,3(不是数组,而是字符)

这是我的模型

<?php
class TagModel extends Eloquent
{
    protected $primaryKey = 'AutoID';
    protected $table = 'tag';

那我做

@foreach($TagDatas as $TagData)
{{ $TagData->TagName }}
@endforeach

它只显示标签表中的第一个元素

即使我调试时它也会显示给我

 select * from `tag` where `TagId` in (1,2,3)

我错过了什么?

【问题讨论】:

  • 如果$BlogData-&gt;Tagged是一个字符串,那么在使用whereIn()之前将其分解为一个数组,否则它将被视为一个文字字符串...... Laravel使用准备好的语句,所以bindvar将是一个字符串:语句应该是select * from `tag` where `TagId` in (?),并且是一个1,2,3的单个bindvar
  • 我应该做 $myArray = explode(',', $BlogData->Tagged); 吗?
  • $TagDatas = TagModel::whereIn('TagId', explode(',', $BlogData-&gt;Tagged))-&gt;get();
  • 完成了!谢谢。您能否将其发布为带有一点解释的答案!因为它帮助了我

标签: php mysql laravel laravel-4 eloquent


【解决方案1】:

如果你将一个字符串值传递给wherein(),当Eloquent准备它的绑定时,它会被当作一个文字字符串,所以实际执行的语句将是

select * from `tag` where `TagId` in ('1,2,3')

您需要将每个值 1、2 和 3 作为单独的数组条目传递,以便正确绑定它们

$TagDatas = TagModel::whereIn('TagId', explode(',', $BlogData->Tagged))
    ->get();

这样 where 会将这三个元素视为单独的数组元素,从而执行查询

select * from `tag` where `TagId` in (1, 2, 3)

【讨论】:

    猜你喜欢
    • 2013-06-10
    • 2020-03-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-10
    • 1970-01-01
    相关资源
    最近更新 更多