Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
U
UserAdminV2
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
庄欣
UserAdminV2
Commits
34605ad4
Commit
34605ad4
authored
Jul 07, 2011
by
Taylor Otwell
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Remove comment bloat from Eloquent hydrator.
parent
bc8c0f2c
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
13 additions
and
59 deletions
+13
-59
system/db/eloquent/hydrator.php
+13
-59
No files found.
system/db/eloquent/hydrator.php
View file @
34605ad4
...
...
@@ -12,14 +12,10 @@ class Hydrator {
*/
public
static
function
hydrate
(
$eloquent
)
{
// -----------------------------------------------------
// Load the base / parent models from the query results.
// -----------------------------------------------------
$results
=
static
::
base
(
get_class
(
$eloquent
),
$eloquent
->
query
->
get
());
// -----------------------------------------------------
// Load all of the eager relationships.
// -----------------------------------------------------
if
(
count
(
$results
)
>
0
)
{
foreach
(
$eloquent
->
includes
as
$include
)
...
...
@@ -54,11 +50,8 @@ class Hydrator {
$model
->
attributes
=
(
array
)
$result
;
$model
->
exists
=
true
;
// -----------------------------------------------------
// The results are keyed by the ID on the record. This
// will allow us to conveniently match them to child
// models during eager loading.
// -----------------------------------------------------
// The results are keyed by the ID on the record. This will allow us to conveniently
// match them to child models during eager loading.
$models
[
$model
->
id
]
=
$model
;
}
...
...
@@ -75,39 +68,27 @@ class Hydrator {
*/
private
static
function
eagerly
(
$eloquent
,
&
$parents
,
$include
)
{
// -----------------------------------------------------
// Get the relationship Eloquent model.
//
// We temporarily spoof the belongs_to key to allow the
// query to be fetched without any problems, since the
// belongs_to method actually gets the attribute.
// -----------------------------------------------------
// We temporarily spoof the belongs_to key to allow the query to be fetched without
// any problems, since the belongs_to method actually gets the attribute.
$eloquent
->
attributes
[
$spoof
=
$include
.
'_id'
]
=
0
;
$relationship
=
$eloquent
->
$include
();
unset
(
$eloquent
->
attributes
[
$spoof
]);
// -----------------------------------------------------
// Reset the WHERE clause and bindings on the query.
// We'll add our own WHERE clause soon.
// -----------------------------------------------------
// Reset the WHERE clause and bindings on the query. We'll add our own WHERE clause soon.
$relationship
->
query
->
where
=
'WHERE 1 = 1'
;
$relationship
->
query
->
bindings
=
array
();
// -----------------------------------------------------
// Initialize the relationship attribute on the parents.
// As expected, "many" relationships are initialized to
// an array and "one" relationships to null.
// -----------------------------------------------------
// Initialize the relationship attribute on the parents. As expected, "many" relationships
// are initialized to an array and "one" relationships are initialized to null.
foreach
(
$parents
as
&
$parent
)
{
$parent
->
ignore
[
$include
]
=
(
strpos
(
$eloquent
->
relating
,
'has_many'
)
===
0
)
?
array
()
:
null
;
}
// -----------------------------------------------------
// Eagerly load the relationships. Phew, almost there!
// -----------------------------------------------------
if
(
$eloquent
->
relating
==
'has_one'
)
{
static
::
eagerly_load_one
(
$relationship
,
$parents
,
$eloquent
->
relating_key
,
$include
);
...
...
@@ -138,14 +119,6 @@ class Hydrator {
*/
private
static
function
eagerly_load_one
(
$relationship
,
&
$parents
,
$relating_key
,
$include
)
{
// -----------------------------------------------------
// Get the all of the related models by the parent IDs.
//
// Remember, the parent results are keyed by ID. So, we
// can simply pass the keys of the array into the query.
//
// After getting the models, we'll match by ID.
// -----------------------------------------------------
foreach
(
$relationship
->
where_in
(
$relating_key
,
array_keys
(
$parents
))
->
get
()
as
$key
=>
$child
)
{
$parents
[
$child
->
$relating_key
]
->
ignore
[
$include
]
=
$child
;
...
...
@@ -181,11 +154,8 @@ class Hydrator {
*/
private
static
function
eagerly_load_belonging
(
$relationship
,
&
$parents
,
$relating_key
,
$include
)
{
// -----------------------------------------------------
// Gather the keys from the parent models. Since the
// foreign key is on the parent model for this type of
// relationship, we have to gather them individually.
// -----------------------------------------------------
// Gather the keys from the parent models. Since the foreign key is on the parent model
// for this type of relationship, we have to gather them individually.
$keys
=
array
();
foreach
(
$parents
as
&
$parent
)
...
...
@@ -193,14 +163,8 @@ class Hydrator {
$keys
[]
=
$parent
->
$relating_key
;
}
// -----------------------------------------------------
// Get the related models.
// -----------------------------------------------------
$children
=
$relationship
->
where_in
(
'id'
,
array_unique
(
$keys
))
->
get
();
// -----------------------------------------------------
// Match the child models with their parent by ID.
// -----------------------------------------------------
foreach
(
$parents
as
&
$parent
)
{
if
(
array_key_exists
(
$parent
->
$relating_key
,
$children
))
...
...
@@ -225,21 +189,16 @@ class Hydrator {
{
$relationship
->
query
->
select
=
null
;
// -----------------------------------------------------
// Retrieve the raw results as stdClasses.
//
// We also add the foreign key to the select which will allow us
// to match the models back to their parents.
// -----------------------------------------------------
// We also add the foreign key to the select which will allow us to match the
// models back to their parents.
$children
=
$relationship
->
query
->
where_in
(
$relating_table
.
'.'
.
$relating_key
,
array_keys
(
$parents
))
->
get
(
Eloquent
::
table
(
get_class
(
$relationship
))
.
'.*'
,
$relating_table
.
'.'
.
$relating_key
);
$class
=
get_class
(
$relationship
);
// -----------------------------------------------------
// Create the related models.
// -----------------------------------------------------
foreach
(
$children
as
$child
)
{
$related
=
new
$class
;
...
...
@@ -247,15 +206,10 @@ class Hydrator {
$related
->
attributes
=
(
array
)
$child
;
$related
->
exists
=
true
;
// -----------------------------------------------------
// Remove the foreign key from the attributes since it
// was added to the query to help us match the models.
// -----------------------------------------------------
// Remove the foreign key from the attributes since it was added to the query
// to help us match the models.
unset
(
$related
->
attributes
[
$relating_key
]);
// -----------------------------------------------------
// Match the child model its parent by ID.
// -----------------------------------------------------
$parents
[
$child
->
$relating_key
]
->
ignore
[
$include
][
$child
->
id
]
=
$related
;
}
}
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment