trexology / contactable
此包最新版本(1.0.1)没有可用的许可证信息。
允许用户在Laravel上拥有多个电子邮件地址和电话号码,并使用它们登录。
1.0.1
2019-01-07 05:35 UTC
Requires
- doctrine/dbal: ^2.5
Requires (Dev)
- laravel/laravel: ^5.2
- phpspec/phpspec: ~2.1
- phpunit/phpunit: ~4.0
This package is auto-updated.
Last update: 2024-09-07 18:53:32 UTC
README
Contactable
这是一个为增强Eloquent用户(或任何其他模型)与多个电子邮件地址和地址的关系而设计的Laravel 5.2+包,同时还允许用户使用上述任何一种方式登录。
composer require trexology/contactable
然后,在app/config/app.php
中包含服务提供者。(对于laravel 5.5+不必要)
'providers' => [ Trexology\Contactable\PointableServiceProvider::class ];
最后,你需要发布并运行迁移。
php artisan vendor:publish --provider="Trexology\Contactable\Providers\ContactableServiceProvider" && php artisan migrate
这将向你的数据库中添加地址、email_addresses和phone_numbers表。
如果适用,请从create_users_table迁移中删除email列。
用法
对于任何你想要有自己的地址或电子邮件地址的模型,添加相应的特质
use Trexology\Contactable\Traits\Addressable;
use Trexology\Contactable\Traits\Phonable;
use Trexology\Contactable\Traits\Emailable;
class User extends Authenticatable implements
{
use Addressable, Phonable, Emailable;
…或者使用Contactable
特质快速添加地址、电话和电子邮件
use Trexology\Contactable\Traits\Contactable;
class User extends Authenticatable implements
{
use Contactable;
上述特质只是简单地将适当的关系添加到你的模型中。现在,你可以像平常一样使用Eloquent查询这些关系。
电子邮件地址可以通过“emails()”方法访问(一个MorphMany关系)
<?php
// Add an e-mail address to a new model
$model = new Model;
$model->emails()->save(new \Trexology\Contactable\EmailAddress(['address' => 'zero@example.com']));
// Add multiple e-mail addresses to a pre-existing model
$model = Model::find(1);
$model->emails()->saveMany([
new \Trexology\Contactable\EmailAddress(['address' => 'one@example.com']),
new \Trexology\Contactable\EmailAddress(['address' => 'two@example.com']),
]);
// Query records which have at least two e-mail addresses
Model::has('emails', '>=', 2)->get();
// Query records which have a specific e-mail address
$address = 'three@example.com';
Model::whereHas('emails', function ($query) use ($address) {
$query->where('address', '=', $address);
});
电话可以通过“phones()”方法访问(一个MorphMany关系)
<?php
// Add a phone number to a new model
$model = new Model;
$model->phones()->save(new \Trexology\Contactable\PhoneNumber(['number' => '123 4567']));
// Add multiple addresses to a pre-existing model
$model = Model::find(1);
$model->phones()->saveMany([
new \Trexology\Contactable\PhoneNumber(['number' => '(234) 567-8900']),
new \Trexology\Contactable\PhoneNumber(['number' => '2222222']),
]);
// Query records which have at least two addresses
Model::has('phones', '>=', 2)->get();
// Query records which have a specific phone number
$number = '(000) 011-0000';
Model::whereHas('phones', function ($query) use ($number) {
$query->where('raw_number', '=', preg_replace("/[^0-9]/", '', $number)); // query only the numbers
});
地址可以通过“addresses()”方法访问(一个MorphMany关系)
<?php
// Add an address to a new model
$model = new Model;
$model->addresses()->save(new \Trexology\Contactable\Address(
[
'block' => '923',
'unit' => '#08-110',
'street' => 'Laravel Road 3',
'postal_code' => '827923', // or zip or zip_code
'country' => 'singapore',
'country_code' => 'sg',
'lat' => '-7.7871130',
'long' => '39.7667430',
]
));
// Add multiple addresses to a pre-existing model
$model = Model::find(1);
$model->addresses()->saveMany([
new \Trexology\Contactable\Address(
[
'block' => '923',
'unit' => '#08-110',
'street' => 'Laravel Road 3',
'postal_code' => '827923', // or zip or zip_code
'country' => 'singapore',
'country_code' => 'sg',
'lat' => '-7.7871130',
'long' => '39.7667430',
]
),
new \Trexology\Contactable\Address(
[
'block' => '782',
'unit' => '#09-36',
'street' => 'Laravel Road 3',
'postal_code' => '876782', // or zip or zip_code
'country' => 'singapore',
'country_code' => 'sg',
'lat' => '33.0691390',
'long' => '44.0820410',
]
),
]);
// Query records which have at least two addresses
Model::has('addresses', '>=', 2)->get();
// Query records which have a specific street name
$street_name = '%Laravel Road 2%';
Model::whereHas('addresses', function ($query) use ($street_name) {
$query->where('street', 'LIKE', $street_name);
});