Sub collection
Retrieve documents from a sub collection
all()
$user = User::where(['id', '=', '123456789'])->firstOrFail();
$profiles = $user->data()->collection('Profile')->all();
first()
$user = User::where(['id', '=', '123456789'])->firstOrFail();
$profile = $user->data()->collection('Profile')->first();
It accepts all Methods from Retrieve documents.
firstOrFail()
$user = User::where(['id', '=', '123456789'])->firstOrFail();
$profile = $user->data()->collection('Profile')->firstOrFail();
It accepts all Methods from Retrieve documents.
get()
$user = User::where(['id', '=', '123456789'])->firstOrFail();
$profiles = $user->data()->collection('Profile')->get();
It accepts all Methods from Retrieve documents.
paginate()
$user = User::where(['id', '=', '123456789'])->firstOrFail();
$profiles = $user->data()->collection('Profile')->paginate();
Make sure you add the filter fields to the Firestore indexes to avoid errors. Read more about Firestore indexes.
where()
$user = User::where(['id', '=', '123456789'])->firstOrFail();
$profiles = $user->data()->collection('Profile')->where(['id', '=', '123456789'])->get();
Make sure you add the filter fields to the Firestore indexes to avoid errors. Read more about Firestore indexes.
orWhere()
$user = User::where(['id', '=', '123456789'])->firstOrFail();
$profiles = $user->data()->collection('Profile')->andWhere([['name', '=', 'John'], ['age' => 25]])->get();
Make sure you add the filter fields to the Firestore indexes to avoid errors. Read more about Firestore indexes.
andWhere()
$user = User::where(['id', '=', '123456789'])->firstOrFail();
$profiles = $user->data()->collection('Profile')->andWhere([['name', '=', 'John'], ['age' => 25]])->get();
Create a document in a sub collection
create($data, $fillable, $required, $default, $fieldTypes, $id)
Parameters
$data
(array) (required) - The data to create the document with$fillable
(array) (required) - The fillable fields of the document. See Fillable$required
(array) (optional) - The required fields of the document. See Required$default
(array) (optional) - The default fields of the document. See Default$fieldTypes
(array) (optional) - The field types of the document. See Field Types$primaryKey
(string) (optional) - The primaryKey of the document. If not provided, the primary key will be'id'
.
Example
$user = User::where(['id', '=', '123456789'])->firstOrFail();
$fillable = ['name', 'age'];
$required = ['name'];
$default = [];
$fieldTypes = ['name' => 'string', 'age' => 'integer'];
$primaryKey = 'id';
$newProfile = $user->data()->collection('Profile')->create([
'name' => 'John',
'age' => 25
], $fillable, $required, $default, $fieldTypes, $primaryKey);
echo $newProfile->data()->name; // John
echo $newProfile->data()->age; // 25
Update a document in a sub collection
updateSubDocument($data, $fillable, $required, $default, $fieldTypes, $primaryKey)
Parameters
$data
(array) (required) - The data to update the document with$fillable
(array) (required) - The fillable fields of the document. See Fillable$required
(array) (optional) - The required fields of the document. See Required$fieldTypes
(array) (optional) - The field types of the document. See Field Types$primaryKey
(string) (default ='id'
) (required if primaryKey is not'id'
) - The primary key of the document. If not provided, the primary key of the model will be used.
Example
$user = User::where(['id', '=', '123456789'])->firstOrFail();
$fillable = ['name', 'age'];
$required = ['name'];
$default = [];
$fieldTypes = ['name' => 'string', 'age' => 'integer'];
$primaryKey = 'id';
$profile = $user->data()->collection('Profile')->where(['id', '=', '123456789'])->firstOrFail();
$updatedProfile = $profile->data()->updateSubDocument([
'name' => 'John',
'age' => 25
], $fillable, $required, $fieldTypes, $primaryKey);
echo $updatedProfile->name; // John
echo $updatedProfile->age; // 25
Delete a document in a sub collection
delete()
Example
$user = User::where(['id', '=', '123456789'])->firstOrFail();
$profile = $user->data()->collection('Profile')->where(['id', '=', '123456789'])->firstOrFail();
$profile->data()->delete();
Delete many documents in a sub collection
Deleting many documents in a sub collection can take a long time if there are a lot of documents in the sub collection.
deleteMany()
Example
$user = User::where(['id', '=', '123456789'])->firstOrFail();
$user->data()->collection('Profile')->where(['age', '>', 20])->deleteMany();
Ordering documents in a sub collection
Make sure you add the filter fields to the Firestore indexes to avoid errors. Read more about Firestore indexes.
orderBy($field, $direction)
Parameters
$field
(string) - The field to order by$direction
(string) - The direction to order by. Can beASC
orDESC
Example
$user = User::where(['id', '=', '123456789'])->firstOrFail();
$profiles = $user->data()->collection('Profile')->orderBy('age', 'DESC')->get()->data();
Limiting documents in a sub collection
limit($limit)
Parameters
$limit
(int) - The limit of documents to retrieve
Example
$user = User::where(['id', '=', '123456789'])->firstOrFail();
$profiles = $user->data()->collection('Profile')->limit(10)->data();
Paginating documents in a sub collection
paginate($limit, $pageName)
Parameters
$limit
(int) - The limit of documents to retrieve$pageName
(string) - The name of the page query string parameter
Example
$user = User::where(['id', '=', '123456789'])->firstOrFail();
$profiles = $user->data()->collection('Profile')->paginate(10, 'page')->data();
Conclusion
That's it! You now know how to use sub collections in your Laravel application. If you have any issues or questions, please open an issue on GitHub.