trexology/contactable

此包最新版本(1.0.1)没有可用的许可证信息。

允许用户在Laravel上拥有多个电子邮件地址和电话号码,并使用它们登录。

1.0.1 2019-01-07 05:35 UTC

This package is auto-updated.

Last update: 2024-09-07 18:53:32 UTC


README

Latest Stable Version Total Downloads Latest Unstable Version License

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);
});