#laravel #laravel-5.3
#laravel #laravel-5.3
Вопрос:
Я использую следующий код для извлечения записей из таблицы:
namespace AppHttpControllers;
use IlluminateHttpRequest;
use IlluminateDatabaseEloquentCollection;
use AppHttpRequests;
//use ApptempLogin;
class loginController extends Controller
{
public function checkCredentials(Request $request){
$mobile = $request->mobile;
$users = ApptempLogin::where('mobile','=',$mobile)->get();
return $user->name;
}
Но это объект eloquent, поэтому он выдает мне ошибку. каким будет другой способ сделать это?
Комментарии:
1. какое сообщение об ошибке?
2. Я просто возвращаю Var_dump ($users), поэтому я получил вывод, подобный object.
3. вы говорите «это выдает мне ошибку»?
4.
$user
не определено, но$users
является
Ответ №1:
У вас опечатка
$users = ApptempLogin::where('mobile','=',$mobile)->get();//you are getting $users
amp; возврат
return $user->name;
Поэтому измените его на
return $users->name;
Но я все еще сомневаюсь, что это решит вашу проблему, поскольку вы используете get
amp; get возвращает a collection
, если у вас нет отношения в tempLogin
модели.
Итак, я предполагаю, что у вас есть запись в БД, которая
mobile
чему-то равна, и вы хотите вернуть ее имя, если это так, то вы можете использовать это решение
$users = ApptempLogin::where('mobile','=',$mobile)->firstOrFail();//source https://github.com/laravel/framework/blob/5.3/src/Illuminate/Database/Eloquent/Builder.php#L299-L306
затем верните
return $users->name;
Если у вас есть несколько записей в БД и вы хотите сделать a
get
,
вы можете сделать это следующим образом
$users = ApptempLogin::select(['name'])->where('mobile','=',$mobile)->get();
Это будет выбирать только name
из таблицы
Теперь вы можете вернуть
return $users;
Который будет представлять собой коллекцию tempLogin
Model amp;, если вы используете его в качестве api, он будет автоматически кодироваться в формате JSON с использованием запроса laravel следующим образом
[{"name":'YOUR_NAME_OF_THE_RECORD'},{"name":'YOUR_NAME_OF_THE_RECORD'}]
Или, если вы хотите вернуть запись в виде массива, вы можете использовать это следующим образом
$users = ApptempLogin::select(['name'])->where('mobile','=',$mobile)->pluck('name')->all();
return $users;
Это вернет массив, подобный этому
[
"YOUR_NAME_OF_THE_RECORD",
"YOUR_NAME_OF_THE_RECORD",
]You have a typo
$users = ApptempLogin::where('mobile','=',$mobile)->get();//you are getting $users
amp; возврат
return $user->name;
Поэтому измените его на
return $users->name;
Но я все еще сомневаюсь, что это решит вашу проблему, поскольку вы используете get
amp; get возвращает a collection
, если у вас нет отношения в tempLogin
модели.
Итак, я предполагаю, что у вас есть запись в БД, которая
mobile
чему-то равна, и вы хотите вернуть ее имя, если это так, то вы можете использовать это решение
$users = ApptempLogin::where('mobile','=',$mobile)->firstOrFail();//source https://github.com/laravel/framework/blob/5.3/src/Illuminate/Database/Eloquent/Builder.php#L299-L306
затем верните
return $users->name;
Если у вас есть несколько записей в БД и вы хотите сделать a
get
,
вы можете сделать это следующим образом
$users = ApptempLogin::select(['name'])->where('mobile','=',$mobile)->get();
Это будет выбирать только name
из таблицы
Теперь вы можете вернуть
return $users;
Который будет представлять собой коллекцию tempLogin
Model amp;, если вы используете его в качестве api, он будет автоматически кодироваться в формате JSON с использованием запроса laravel следующим образом
[{"name":'YOUR_NAME_OF_THE_RECORD'},{"name":'YOUR_NAME_OF_THE_RECORD'}]
Или, если вы хотите вернуть запись в виде массива, вы можете использовать это следующим образом
$users = ApptempLogin::select(['name'])->where('mobile','=',$mobile)->pluck('name')->all();
return $users;
Это вернет массив, подобный этому
[
"YOUR_NAME_OF_THE_RECORD",
"YOUR_NAME_OF_THE_RECORD",
]
Комментарии:
1. но у меня нет дубликата мобильного телефона. в БД, поэтому он будет извлекать несколько записей, и именно поэтому я хочу перебирать $users.
2. это не сработает, потому что ->get() вернет коллекцию. не модель. вам нужно выполнить итерацию или использовать индексированный доступ, чтобы получить свойство модели.
3. Но в документации указано, что мы можем перебирать коллекцию.
4. @ARIF… Я изменил что-то вроде этого: $users = tempLogin::where(‘mobile’,’=’,$mobile)-> get(); Могу ли я теперь получить доступ к именам??
5. Нет, вы не можете, потому что это
collection
amp; вы хотите получить доступ к свойству модели, которая находится внутри коллекции, вы можете получить доступ к name, только если это экземпляр модели
Ответ №2:
Вы пытаетесь использовать $user
переменную, которая не определена. Вы должны выполнить итерацию по коллекции, чтобы получить одного пользователя:
foreach ($users as $user) {
echo $user->name;
}
Ответ №3:
Обычно вы перебираете элементы коллекции следующим образом:
$users = ApptempLogin::where('mobile','=',$mobile)->get();
if($users->count() > 0)
{
forach($users as $user)
{
// do something with the AppUser model
$name = $user->name;
}
}
но если вы хотите получить доступ к коллекции users в виде массива, измените запрос следующим образом:
$users = ApptempLogin::where('mobile','=',$mobile)->toArray();
затем вы можете получить к нему доступ следующим образом:
foreach($users as $user)
{
// now the $user contains an array containing each row data.
$name = $user["name"];
}
если вы хотите получить доступ к одному пользователю:
$user = ApptempLogin::where('mobile','=',$mobile)->first();
$name = $user->name;
это приведет к получению первой (смещение 0, ограничение 1) строки для вас. Вам нужно указать порядок, чтобы получить желаемую первую строку.
Комментарии:
1. Я изменил его следующим образом: $mobile = $request-> mobile; $users = tempLogin::where(‘mobile’,’=’,$mobile) -> toArray(); вернуть $users;