gpt4 book ai didi

php - 在 Laravel 中混淆数组和对象

转载 作者:可可西里 更新时间:2023-10-31 22:42:07 24 4
gpt4 key购买 nike

我正在学习 Laravel,它使用了 OOPS 概念。现在我发现很难理解数组和对象之间的真正区别。我其实知道数组和对象是什么。

数组可以包含多个变量,其中对象是一个独立的实体,有自己的参数和方法。我们通常使用 foreach 循环来遍历它们。

在laravel中,数据以模型实例的形式作为对象返回。当查询响应有多个结果时,数据以包含对象的数组形式返回。我试图了解 laravel 中使用的集合类。

Codebright 引用资料说

The Collection class itself, is merely a wrapper for an array of objects, but has a bunch of other interesting methods to help you pluck items out of the array.

现在回到我的困惑。我使用了不同的方法,例如 all()first() 方法来获取结果。但有时当我使用箭头 (->) 使用 foreach 循环从一个对象(包含在数组中)获取数据时,它会显示一个错误,表明它不是一个对象。然后我用方括号显示了数据。

我知道我们使用 [] 从数组中获取数据,我们使用 -> 从对象中获取数据。但我仍然对 Laravel 感到困惑。有人可以引用 Laravel 中使用的 Collection 类清楚地说明它们之间的区别吗?

编辑:使用这段代码时开始出现困惑:

foreach($self_conversations as $self_conversations_fetch){
//fetching each conversation id
$conversation_id = Conversation::find($self_conversations_fetch->conversation_id);
$user_id = array();

//fetching each conversation member's id
foreach($conversation_id->conversationsMember as $conversationmembers)
$user_id[] = $conversationmembers->user_id;

$self_id = User::where('email', Session::get('email'))->first()->id;
$self_id_array = array($self_id);
$friend_id_array = array_diff($user_id, $self_id_array);

foreach($friend_id_array as $friend_id) array_push($friend_ids, $friend_id);

$conversations_reply_obj = ConversationReply::where('conversation_id', $self_conversations_fetch->conversation_id)->orderBy('updated_at', 'desc')->first();

$conversations_reply[] = $conversations_reply_obj['reply'];
}

如您所见,我使用了方括号来获取数据(在最后一行)。

$conversations_reply[] = $conversations_reply_obj['reply'];

我期待箭头在这里工作

最佳答案

实际上 Collection 类是一个包装器对象,它返回一个对象集合。例如,如果您有一个模型,例如 User,那么您可以通过多种方式使用它,获取您可以使用的所有记录 User::all() 并获取一条记录,您可以使用 User::find(1),也可以使用其他方法。

如果你使用all(), get()方法那么你会得到一个集合对象,它意味着一个User的集合当您在 User 模型上使用这些方法并记住 all()get() 总是返回模型集合时,即使只有其中一个模型,所以检查这个例子:

$users = User::all(); // returns a collection

你可以像这样使用 Collection 对象的 first() 方法:

$users = User::all();
$users->first();

或者直接:

$user = User::first();

您也可以使用 last 从集合中获取最后一个项目/模型。您也可以像这样使用 get():

$users = User::all();
$users = User::get(0) // to get first item/model
$users = User::get(1) // to get second item/model

你也可以使用这样的循环:

$users = User::get(); // same as all
// pass the collection to the view
return View::make('users.index')->with('users', $users);

现在在您的 views/users/index.blade.php View 中您可以使用这样的循环:

@foreach($users as $user)
{{ $user->username }}<br />
{{ $user->email }}<br />
@endforeach

重要的是要知道,all()get() 方法返回一个集合,first()find (id) 返回一个单一的模型对象,所以如果你有一个单一的模型,那么你可以像这样直接使用它:

$user = user::find(1); // 1 is id for example
return View::make('users.index')->with('user', $user);

在你看来你可以使用:

{{ $user->email }}

您可以使用 -> 的对象,例如 $user->name 和使用 $user['name'] 的数组但在这种情况下,您可以同时使用这两种语法,因为 LaravelEloquent/Model 实现了 ArrayAccess(以及其他)接口(interface),因此每个扩展的模型Eloquent 可以使用数组和对象语法来访问属性。所以,以下是可能的:

$user = User::where('username', 'me')->get();
return View::make('users.index')->with('user', $user);

View 中你可以使用:

{{ $user->name }}
{{ $user['name'] }}

为了更好地理解 Collection 类及其方法,请查看源代码,您可以在 vendor/laravel/framework/src/Illuminate/Database/Eloquent/Collection.php 找到它 本地安装,它扩展了 Illuminate/Support/Collection.php 类。检查两个类。您还可以阅读 this article ,它会帮助你更多。

关于php - 在 Laravel 中混淆数组和对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22897919/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com