我收到了错误;
模型[App \ UserProfile] 0
没有查询结果
当我使用在foreach循环中使用AJAX传递的数组时使用findOrFail。如果我在PHP中手动创建数组,则使用数组值找到实体。当我在PHP中对数组执行print_r()时,该数组存在于AJAX数组和手动创建的数组中。
AJAX代码
function checkChatOnlineStatus()
{
var chatUserProfileIds = {"key-60":60,"key-52":52,"key-2":2,"key-3":3}
$.ajax({
url: '/check-chat-online-status',
method: 'get',
data: {chatUserProfileIds: chatUserProfileIds},
dataType: 'json',
success: function(response) {
}
});
}
PHP代码
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\UserProfile;
class CheckRunningParametersController extends Controller
{
public function checkChatOnlineStatus()
{
$chatUserProfileIds = $_GET['chatUserProfileIds'] ? $_GET['chatUserProfileIds'] : NULL;
//$chatUserProfileIds = array('key-60' => 60, 'key-52' => 52, 'key-2' => 2, 'key-3' => 3);
/* Check Status For Chat Contacts */
if ($chatUserProfileIds != NULL)
{
foreach ($chatUserProfileIds as $key => $value)
{
$userProfile = UserProfile::findOrFail((int)$value);
$chatOnlineStatus['contacts'][$key] = $userProfile->isOnline();
}
}
return $chatOnlineStatus;
}
}
答案 0 :(得分:0)
如果没有带有该id的UserProfile,则使用findOrFail()将抛出异常。您可能正在将ID号推回到Laravel的不存在的数据库中。如果您不想要异常并希望自行检查,请使用first()或find(),然后执行if检查isset以查看是否返回了模型,如果ID没有&#39则执行空值; t匹配UserProfile。 IE:
$userProfile = UserProfile::find((int)$value);
if(isset($userProfile)
$chatOnlineStatus['contacts'][$key] = $userProfile->isOnline();
如果您确定UserProfile存在您传递的ID,则可能是错误地将字符串强制转换为int的问题。检查以确切通过dd()传递什么(int)。您可能还希望使用原生Laravel \ Input :: get(&#39; chatUserProfileIds&#39;)而不是$ _GET。
答案 1 :(得分:0)
这里您的PHP代码将是这样的
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\UserProfile;
class CheckRunningParametersController extends Controller
{
public function checkChatOnlineStatus()
{
$chatUserProfileIds = $_GET['chatUserProfileIds'];
/* Check Status For Chat Contacts */
if ($chatUserProfileIds != NULL)
{
foreach ($chatUserProfileIds as $key => $value)
{
$userProfile = UserProfile::where("id",(int)$value)->first();
$chatOnlineStatus['contacts'][$key] = $userProfile->isOnline();
}
}
return $chatOnlineStatus;
}
}
答案 2 :(得分:0)
试试这个简单的代码
if($ chatUserProfileIds){
$ userProfile = UserProfile :: whereIn(“id”,array_values($ chatUserProfileIds)) - &gt; get();
}
答案 3 :(得分:0)
@Muhammad Sadiq
我试过了;
if( $chatUserProfileIds != NULL ){
$userProfiles = UserProfile::whereIn("id",array_values($chatUserProfileIds))->get();
foreach ($userProfiles as $userProfile)
{
//print_r($userProfile->id);
$chatOnlineStatus['contacts'][$userProfile->id] = $userProfile->isOnline();
}
}
代码仅在我删除print_r语句的注释或在此时添加任何其他语句如echo时才有效
答案 4 :(得分:0)
我发现了问题。真的很傻。我将数据的分配移动到数组中使用的JavaScript对象到全局范围,这似乎有效。
// Moved this to global scope in the Javascript
var chatUserProfileIds = {"key-60":60,"key-52":52,"key-2":2,"key-3":3}