Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
Y
yii2
Project
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
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
PSDI Army
yii2
Commits
5dca1257
Commit
5dca1257
authored
Jan 09, 2014
by
Carsten Brandt
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
reverted primaryKey of elasticsearch to be array again
meet the AR interface requirements.
parent
a7b852fc
Show whitespace changes
Inline
Side-by-side
Showing
11 changed files
with
54 additions
and
35 deletions
+54
-35
ActiveQuery.php
extensions/yii/elasticsearch/ActiveQuery.php
+3
-3
ActiveRecord.php
extensions/yii/elasticsearch/ActiveRecord.php
+39
-20
Generator.php
extensions/yii/gii/generators/crud/Generator.php
+4
-4
controller.php
extensions/yii/gii/generators/crud/templates/controller.php
+1
-1
ActiveDataProvider.php
framework/yii/data/ActiveDataProvider.php
+1
-1
BaseActiveRecord.php
framework/yii/db/BaseActiveRecord.php
+1
-1
UniqueValidator.php
framework/yii/validators/UniqueValidator.php
+1
-1
Customer.php
tests/unit/data/ar/elasticsearch/Customer.php
+1
-1
Item.php
tests/unit/data/ar/elasticsearch/Item.php
+1
-1
Order.php
tests/unit/data/ar/elasticsearch/Order.php
+1
-1
ActiveRecordTest.php
tests/unit/extensions/elasticsearch/ActiveRecordTest.php
+1
-1
No files found.
extensions/yii/elasticsearch/ActiveQuery.php
View file @
5dca1257
...
...
@@ -92,7 +92,7 @@ class ActiveQuery extends Query implements ActiveQueryInterface
}
/** @var ActiveRecord $modelClass */
$modelClass
=
$this
->
modelClass
;
$pk
=
$modelClass
::
primaryKey
();
$pk
=
$modelClass
::
primaryKey
()
[
0
]
;
if
(
$this
->
asArray
&&
$this
->
indexBy
)
{
foreach
(
$result
[
'hits'
][
'hits'
]
as
&
$row
)
{
if
(
$pk
===
'_id'
)
{
...
...
@@ -136,7 +136,7 @@ class ActiveQuery extends Query implements ActiveQueryInterface
/** @var ActiveRecord $modelClass */
$modelClass
=
$this
->
modelClass
;
$model
=
$result
[
'_source'
];
$pk
=
$modelClass
::
primaryKey
();
$pk
=
$modelClass
::
primaryKey
()
[
0
]
;
if
(
$pk
===
'_id'
)
{
$model
[
'_id'
]
=
$result
[
'_id'
];
}
...
...
@@ -165,7 +165,7 @@ class ActiveQuery extends Query implements ActiveQueryInterface
if
(
$this
->
asArray
)
{
/** @var ActiveRecord $modelClass */
$modelClass
=
$this
->
modelClass
;
$pk
=
$modelClass
::
primaryKey
();
$pk
=
$modelClass
::
primaryKey
()
[
0
]
;
foreach
(
$models
as
$key
=>
$model
)
{
if
(
$pk
===
'_id'
)
{
$model
[
'_source'
][
'_id'
]
=
$model
[
'_id'
];
...
...
extensions/yii/elasticsearch/ActiveRecord.php
View file @
5dca1257
...
...
@@ -171,7 +171,7 @@ class ActiveRecord extends BaseActiveRecord
*/
public
function
setPrimaryKey
(
$value
)
{
$pk
=
static
::
primaryKey
();
$pk
=
static
::
primaryKey
()
[
0
]
;
if
(
$this
->
getIsNewRecord
()
||
$pk
!=
'_id'
)
{
$this
->
$pk
=
$value
;
}
else
{
...
...
@@ -184,7 +184,7 @@ class ActiveRecord extends BaseActiveRecord
*/
public
function
getPrimaryKey
(
$asArray
=
false
)
{
$pk
=
static
::
primaryKey
();
$pk
=
static
::
primaryKey
()
[
0
]
;
if
(
$asArray
)
{
return
[
$pk
=>
$this
->
$pk
];
}
else
{
...
...
@@ -197,7 +197,7 @@ class ActiveRecord extends BaseActiveRecord
*/
public
function
getOldPrimaryKey
(
$asArray
=
false
)
{
$pk
=
static
::
primaryKey
();
$pk
=
static
::
primaryKey
()
[
0
]
;
if
(
$this
->
getIsNewRecord
())
{
$id
=
null
;
}
elseif
(
$pk
==
'_id'
)
{
...
...
@@ -213,21 +213,37 @@ class ActiveRecord extends BaseActiveRecord
}
/**
* This method defines the
primary
.
* This method defines the
attribute that uniquely identifies a record
.
*
* The primaryKey for elasticsearch documents is always `primaryKey`. It can not be changed.
* The primaryKey for elasticsearch documents is the `_id` field by default. This field is not part of the
* ActiveRecord attributes so you should never add `_id` to the list of [[attributes()|attributes]].
*
* @return string the primary key of this record.
* You may overide this method to define the primary key name when you have defined
* [path mapping](http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/mapping-id-field.html)
* for the `_id` field so that it is part of the `_source` and thus part of the [[attributes()|attributes]].
*
* Note that elasticsearch only supports _one_ attribute to be the primary key. However to match the signature
* of the [[\yii\db\ActiveRecordInterface|ActiveRecordInterface]] this methods returns an array instead of a
* single string.
*
* @return string[] array of primary key attributes. Only the first element of the array will be used.
*/
public
static
function
primaryKey
()
{
return
'_id'
;
return
[
'_id'
]
;
}
/**
* Returns the list of all attribute names of the model.
*
* This method must be overridden by child classes to define available attributes.
* @return array list of attribute names.
*
* Attributes are names of fields of the corresponding elasticsearch document.
* The primaryKey for elasticsearch documents is the `_id` field by default which is not part of the attributes.
* You may define [path mapping](http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/mapping-id-field.html)
* for the `_id` field so that it is part of the `_source` fields and thus becomes part of the attributes.
*
* @return string[] list of attribute names.
*/
public
function
attributes
()
{
...
...
@@ -260,7 +276,7 @@ class ActiveRecord extends BaseActiveRecord
public
static
function
create
(
$row
)
{
$record
=
parent
::
create
(
$row
[
'_source'
]);
$pk
=
static
::
primaryKey
();
$pk
=
static
::
primaryKey
()
[
0
]
;
$record
->
$pk
=
$row
[
'_id'
];
$record
->
_score
=
isset
(
$row
[
'_score'
])
?
$row
[
'_score'
]
:
null
;
$record
->
_version
=
isset
(
$row
[
'_version'
])
?
$row
[
'_version'
]
:
null
;
// TODO version should always be available...
...
...
@@ -336,8 +352,11 @@ class ActiveRecord extends BaseActiveRecord
if
(
!
isset
(
$response
[
'ok'
]))
{
return
false
;
}
$pk
=
static
::
primaryKey
();
$values
[
$pk
]
=
$this
->
$pk
=
$response
[
'_id'
];
$pk
=
static
::
primaryKey
()[
0
];
$this
->
$pk
=
$response
[
'_id'
];
if
(
$pk
!=
'_id'
)
{
$values
[
$pk
]
=
$response
[
'_id'
];
}
$this
->
_version
=
$response
[
'_version'
];
$this
->
_score
=
null
;
$this
->
setOldAttributes
(
$values
);
...
...
@@ -362,9 +381,9 @@ class ActiveRecord extends BaseActiveRecord
*/
public
static
function
updateAll
(
$attributes
,
$condition
=
[])
{
$pkName
=
static
::
primaryKey
();
$pkName
=
static
::
primaryKey
()
[
0
]
;
if
(
count
(
$condition
)
==
1
&&
isset
(
$condition
[
$pkName
]))
{
$primaryKeys
=
(
array
)
$condition
[
$pkName
];
$primaryKeys
=
is_array
(
$condition
[
$pkName
])
?
$condition
[
$pkName
]
:
[
$condition
[
$pkName
]
];
}
else
{
$primaryKeys
=
static
::
find
()
->
where
(
$condition
)
->
column
(
$pkName
);
// TODO check whether this works with default pk _id
}
...
...
@@ -372,7 +391,7 @@ class ActiveRecord extends BaseActiveRecord
return
0
;
}
$bulk
=
''
;
foreach
(
(
array
)
$primaryKeys
as
$pk
)
{
foreach
(
$primaryKeys
as
$pk
)
{
$action
=
Json
::
encode
([
"update"
=>
[
"_id"
=>
$pk
,
...
...
@@ -420,9 +439,9 @@ class ActiveRecord extends BaseActiveRecord
*/
public
static
function
updateAllCounters
(
$counters
,
$condition
=
[])
{
$pkName
=
static
::
primaryKey
();
$pkName
=
static
::
primaryKey
()
[
0
]
;
if
(
count
(
$condition
)
==
1
&&
isset
(
$condition
[
$pkName
]))
{
$primaryKeys
=
(
array
)
$condition
[
$pkName
];
$primaryKeys
=
is_array
(
$condition
[
$pkName
])
?
$condition
[
$pkName
]
:
[
$condition
[
$pkName
]
];
}
else
{
$primaryKeys
=
static
::
find
()
->
where
(
$condition
)
->
column
(
$pkName
);
// TODO check whether this works with default pk _id
}
...
...
@@ -430,7 +449,7 @@ class ActiveRecord extends BaseActiveRecord
return
0
;
}
$bulk
=
''
;
foreach
(
(
array
)
$primaryKeys
as
$pk
)
{
foreach
(
$primaryKeys
as
$pk
)
{
$action
=
Json
::
encode
([
"update"
=>
[
"_id"
=>
$pk
,
...
...
@@ -478,9 +497,9 @@ class ActiveRecord extends BaseActiveRecord
*/
public
static
function
deleteAll
(
$condition
=
[])
{
$pkName
=
static
::
primaryKey
();
$pkName
=
static
::
primaryKey
()
[
0
]
;
if
(
count
(
$condition
)
==
1
&&
isset
(
$condition
[
$pkName
]))
{
$primaryKeys
=
(
array
)
$condition
[
$pkName
];
$primaryKeys
=
is_array
(
$condition
[
$pkName
])
?
$condition
[
$pkName
]
:
[
$condition
[
$pkName
]
];
}
else
{
$primaryKeys
=
static
::
find
()
->
where
(
$condition
)
->
column
(
$pkName
);
// TODO check whether this works with default pk _id
}
...
...
@@ -488,7 +507,7 @@ class ActiveRecord extends BaseActiveRecord
return
0
;
}
$bulk
=
''
;
foreach
(
(
array
)
$primaryKeys
as
$pk
)
{
foreach
(
$primaryKeys
as
$pk
)
{
$bulk
.=
Json
::
encode
([
"delete"
=>
[
"_id"
=>
$pk
,
...
...
extensions/yii/gii/generators/crud/Generator.php
View file @
5dca1257
...
...
@@ -176,7 +176,7 @@ class Generator extends \yii\gii\Generator
/** @var \yii\db\ActiveRecord $class */
$class
=
$this
->
modelClass
;
$pk
=
$class
::
primaryKey
();
return
is_array
(
$pk
)
?
$pk
[
0
]
:
$pk
;
return
$pk
[
0
]
;
}
/**
...
...
@@ -363,7 +363,7 @@ class Generator extends \yii\gii\Generator
{
/** @var ActiveRecord $class */
$class
=
$this
->
modelClass
;
$pks
=
(
array
)
$class
::
primaryKey
();
$pks
=
$class
::
primaryKey
();
if
(
count
(
$pks
)
===
1
)
{
return
"'id' =>
\$
model->
{
$pks
[
0
]
}
"
;
}
else
{
...
...
@@ -379,7 +379,7 @@ class Generator extends \yii\gii\Generator
{
/** @var ActiveRecord $class */
$class
=
$this
->
modelClass
;
$pks
=
(
array
)
$class
::
primaryKey
();
$pks
=
$class
::
primaryKey
();
if
(
count
(
$pks
)
===
1
)
{
return
'$id'
;
}
else
{
...
...
@@ -391,7 +391,7 @@ class Generator extends \yii\gii\Generator
{
/** @var ActiveRecord $class */
$class
=
$this
->
modelClass
;
$pks
=
(
array
)
$class
::
primaryKey
();
$pks
=
$class
::
primaryKey
();
if
((
$table
=
$this
->
getTableSchema
())
===
false
)
{
$params
=
[];
foreach
(
$pks
as
$pk
)
{
...
...
extensions/yii/gii/generators/crud/templates/controller.php
View file @
5dca1257
...
...
@@ -19,7 +19,7 @@ if ($modelClass === $searchModelClass) {
/** @var ActiveRecordInterface $class */
$class
=
$generator
->
modelClass
;
$pks
=
(
array
)
$class
::
primaryKey
();
$pks
=
$class
::
primaryKey
();
$urlParams
=
$generator
->
generateUrlParams
();
$actionParams
=
$generator
->
generateActionParams
();
$actionParamComments
=
$generator
->
generateActionParamComments
();
...
...
framework/yii/data/ActiveDataProvider.php
View file @
5dca1257
...
...
@@ -128,7 +128,7 @@ class ActiveDataProvider extends BaseDataProvider
}
elseif
(
$this
->
query
instanceof
ActiveQueryInterface
)
{
/** @var \yii\db\ActiveRecord $class */
$class
=
$this
->
query
->
modelClass
;
$pks
=
(
array
)
$class
::
primaryKey
();
$pks
=
$class
::
primaryKey
();
if
(
count
(
$pks
)
===
1
)
{
$pk
=
$pks
[
0
];
foreach
(
$models
as
$model
)
{
...
...
framework/yii/db/BaseActiveRecord.php
View file @
5dca1257
...
...
@@ -1273,7 +1273,7 @@ abstract class BaseActiveRecord extends Model implements ActiveRecordInterface
*/
public
static
function
isPrimaryKey
(
$keys
)
{
$pks
=
(
array
)
static
::
primaryKey
();
$pks
=
static
::
primaryKey
();
if
(
count
(
$keys
)
===
count
(
$pks
))
{
return
count
(
array_intersect
(
$keys
,
$pks
))
===
count
(
$pks
);
}
else
{
...
...
framework/yii/validators/UniqueValidator.php
View file @
5dca1257
...
...
@@ -101,7 +101,7 @@ class UniqueValidator extends Validator
$n
=
count
(
$objects
);
if
(
$n
===
1
)
{
$keys
=
array_keys
(
$params
);
$pks
=
(
array
)
$targetClass
::
primaryKey
();
$pks
=
$targetClass
::
primaryKey
();
sort
(
$keys
);
sort
(
$pks
);
if
(
$keys
===
$pks
)
{
...
...
tests/unit/data/ar/elasticsearch/Customer.php
View file @
5dca1257
...
...
@@ -22,7 +22,7 @@ class Customer extends ActiveRecord
public
static
function
primaryKey
()
{
return
'id'
;
return
[
'id'
]
;
}
public
function
attributes
()
...
...
tests/unit/data/ar/elasticsearch/Item.php
View file @
5dca1257
...
...
@@ -14,7 +14,7 @@ class Item extends ActiveRecord
{
public
static
function
primaryKey
()
{
return
'id'
;
return
[
'id'
]
;
}
public
function
attributes
()
...
...
tests/unit/data/ar/elasticsearch/Order.php
View file @
5dca1257
...
...
@@ -15,7 +15,7 @@ class Order extends ActiveRecord
{
public
static
function
primaryKey
()
{
return
'id'
;
return
[
'id'
]
;
}
public
function
attributes
()
...
...
tests/unit/extensions/elasticsearch/ActiveRecordTest.php
View file @
5dca1257
...
...
@@ -251,7 +251,7 @@ class ActiveRecordTest extends ElasticSearchTestCase
public
function
testInsertNoPk
()
{
$this
->
assertEquals
(
'id'
,
Customer
::
primaryKey
());
$this
->
assertEquals
(
[
'id'
]
,
Customer
::
primaryKey
());
$pkName
=
'id'
;
$customer
=
new
Customer
;
...
...
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