Я просматриваю некоторый код laravel, и у меня есть несколько вопросов относительно кода. В представлении я вижу кусок кода "$data->profile->age". Этот код автоматически находит запись профиля в таблице профилей, связанную с $data? Как он находит связанный профиль?
Контроллер:
return view('new-design.pages.influencer.info')
->withData($data)
Вид:
$data->profile->age






Я считаю, что в вашей модели для $data есть функция, называемая профилем. Отсюда получается эквивалентный профиль.
Пример. Представьте, что у вас есть модель телефона, и вы хотите найти пользователя, которому она принадлежит. Вы можете написать следующую функцию в своей модели.
public function user()
{
return $this->belongsTo('App\User');
}
И в представлении вы можете написать что-то вроде
$phone->user->name
Теперь за сценой laravel перейдет к телефону и получит значение от user_id для этого телефона. (Если внешний ключ находится в другом столбце, вы также можете указать это). Затем laravel найдет таблицу пользователей с этим user_id и получит строку. Затем покажите имя на просмотре.
Теперь, если есть сложный запрос, вы также можете написать для него функцию в модели.
да. Он находит связанный профиль, используя отношения, которые вы определили в своей модели профиля.
Once the relationship is defined, we may retrieve the related record using Eloquent's dynamic properties. Dynamic properties allow you to access relationship methods as if they were properties defined on the model:
Вот простой пример из документация, который поможет вам понять:
Допустим, у вас есть стол posts и стол comments:
Нам нужно определить связь между этими двумя таблицами.
A one-to-many relationship is used to define relationships where a single model owns any amount of other models. For example, a blog post may have an infinite number of comments.
Примечание: у вас должен быть внешний ключ в вашей таблице comments, ссылающийся на таблицу posts, например post_id, в этом случае, если вы используете другое имя, вы должны сообщить об этом в своем отношении:
Remember, Eloquent will automatically determine the proper foreign key column on the Comment model. By convention, Eloquent will take the "snake case" name of the owning model and suffix it
with _id. So, for this example, Eloquent will assume the foreign key on the Comment model ispost_id.
В вашей модели Сообщение вы можете сделать:
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class Post extends Model
{
/**
* Get the comments for the blog post.
*/
public function comments()
{
return $this->hasMany('App\Comment');
}
}
И в вашей модели Комментарий вы должны определить обратную связь
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class Comment extends Model
{
/**
* Get the post that owns the comment.
*/
public function post()
{
return $this->belongsTo('App\Post');
}
}
Теперь, если вы хотите получить доступ ко всем комментариям к посту, вам просто нужно получить отношение:
$post = Post::find($id); // find a post
$post->comments; // This will return all comments that belong to the given post
Таким образом, вы в основном получаете к ним доступ, как если бы они были свойством модели, как сказано в документации.
На ваш взгляд, вы могли бы сделать что-то вроде этого:
@foreach($post->comments as $comment)
{
{{$comment->text}}
}
@endforeach
В этом примере будет напечатан каждый текст комментария из сообщения, которое мы получаем в контроллере.